选择选项时显示未选择任何选项的窗体错误消息


Form showing no option is selected error message when options are selected

我有以下形式:

<form action="#" method="POST" enctype="multipart/form-data">
    from:
    <select name="age_from" id="age_a" onchange="checkages_a()">
        <option value=""></option>
        <?php
        for($i = 17; $i <= 50; ++$i) {
            echo "'t", '<option value="', $i. '">', $i, '</option>', "'n";
        }
        ?>
    </select>
    to:
    <select name="age_to" id="age_b" onchange="checkages_b()">
        <option value=""></option>
        <?php
        for($i = 18; $i <= 50; ++$i) {
            echo "'t", '<option value="', $i, '">', $i, '</option>', "'n";
        }
        ?>
    </select>
    <input type="radio" name="gender" value="male">Male</input> <br />
    <input type="radio" name="gender" value="female">Female</input><br />
    <input type="submit" class="btn btn-info" 
        name="submit_form" value="Click to start chat! " />

它的工作方式是用户可以从genderage中选择两个选项之一,并搜索用户。不需要同时完成这两个选项即可进行搜索。

但是,如果未选择任何选项,我希望它保留在当前页面('random_chat.php),并回显消息。

这是我的方法:

$refined_gender = isset($_POST['gender']) ? escape($_POST['gender']) : '';
$age_from       = isset($_POST['age_from']) ? escape($_POST['age_from']) : '';
$age_to         = isset($_POST['age_to']) ? escape($_POST['age_to']) : '';
if (isset($_POST['submit_form'])){
if (empty ($refined_gender) || empty($age_from) || empty ($age_to)) {
    echo "<div class='no_user'><p> Please apply at least one of the filters above. </p> </div>";
} else {
// search user
}

目前,当我的两个搜索选项都为空时,消息会回显,这很好。但是当我搜索男性用户或年龄不为空时,该消息也会回响,这不应该发生。

您需要将||更改为&&,(其他一些更改也表示为注释):-

<form method="POST" enctype="multipart/form-data"> <!-- remove action ='#' -->
from:
<select name="age_from" id="age_a" onchange="checkages_a()"> 
    <option value=""></option>
    <?php
        for($i = 17; $i <= 50; ++$i) {
            if(isset($_POST['age_from']) && $_POST['age_from'] == $i){ // to make selected value to be  selected even after form submit
                echo "'t", '<option value="', $i. '" selected ="selected">', $i, '</option>', "'n";
            }else{
                echo "'t", '<option value="', $i. '">', $i, '</option>', "'n";
            }
        }
    ?>
</select>
to: 
<select name="age_to" id="age_b" onchange="checkages_b()"> 
    <option value=""></option>
    <?php
        for($i = 18; $i <= 50; ++$i) {
            if(isset($_POST['age_to']) && $_POST['age_to'] == $i){// to make selected value to be  selected even after form submit
                echo "'t", '<option value="', $i. '" selected ="selected">', $i, '</option>', "'n";
            }else{
                echo "'t", '<option value="', $i. '">', $i, '</option>', "'n";
            }
        }
    ?>
</select>
<input type="radio" name="gender" value="male">Male</input> <br />
<input type="radio" name="gender" value="female">Female</input><br />
<input type="submit" class="btn btn-info" name="submit_form" value="Click to start chat! " />
<form>
<?php 
$refined_gender = isset($_POST['gender']) ? $_POST['gender'] : ''; // escape gives me undefined function error at my end so i removed it, but if it is working at your end thhen keep it up as it is.
$age_from       = isset($_POST['age_from']) ? $_POST['age_from'] : '';
$age_to         = isset($_POST['age_to']) ? $_POST['age_to'] : '';
if (empty ($refined_gender) && empty($age_from) && empty ($age_to)) { // check always with form posted value not submit button value and also cange || to &&
    echo "<div class='no_user'><p> Please apply at least one of the filters above. </p> </div>";
} else {
// search user
}
?>

if 条件不反映您想要的内容 像这样修复它

 if (empty ($refined_gender) && empty($age_from) && empty ($age_to)) { 
echo "<div class='no_user'><p> Please apply at least one of the filters above. </p> </div>"; 
} else { // search user }