Freddy Freddy - 7 months ago 9
PHP Question

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

I have the following form:

<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! " />


The way it works is that a user can select one of the two options from
gender
and
age
and search for a user. It is not required for both options to be completed to search.

However, if none of the options are selected, I want it to stay on the current page (`random_chat.php), and echo a message.

Here is my approach:

$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
}


Currently, when I have both search options empty, the message echos, which is good. But the message also echos when I am searching for a male user, or have age not empty, which shouldn't happen.

Answer

you need to change || to &&, (Some other changes are also stated as comment):-

<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
}
?>