Vincent DUPONT Vincent DUPONT - 7 months ago 12
PHP Question

Using a if in an if with a string check don't work

I do not understand why my if an the if doesn't work. This is my code :

if (isset($_POST['salle'])){
$idSalle = $_POST['salle'];
echo('La salle séléctionnée est :' . $idSalle . '<br />');

if ($idSalle == "- - - Choisissez une salle - - - ") {
/* DO NOT PASS HERE :( */

$idSalle = "Non séléctionné";
echo('La salle séléctionnée est :' . $idSalle . '<br />');
}

}


But, when I select - - - Choisissez une salle - - - on the checklist, the page respond "La salle séléctionnée est :- - - Choisissez une salle - - -" or, logically, the text should be "La salle séléctionnée est : Non selectionné".

This is my full code :



<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

</head>
<body>

<?php
include('fonctionsBDD.php');
$bdd = connectionBDD();

$idSalle = 0;
$idUtilisateur = 0;
$dateDebut = 0;
$dateFin = 0;
?>




<!-- Choix des filtres à afficher -->

<p>Quels filtres afficher ?</p>

<form action="" method="POST">
<input type="checkbox" name="cbx-zones">Zones</input>
<input type="checkbox" mname="cbx-salles">Salles</input>
<input type="checkbox" name="cbx-dates">Date</input>
<input type="checkbox" name="cbx-heures">Heures</input>
<p><input type="submit" /></p>
</form>

<!-- Zone filtres -->

<div class="FiltreSalle">

<form action="" method="POST">

<?php
if (isset($_POST['cbx-zones'])) {
/* COntenu d'un filtre ici */
}

?>
<!-- Filtre par Area Name-->

<form action="" method="POST">
<br /><br />

<label>Choisir la zone </label><br />

<select name="zone">

<?php
echo " <option unselected>- - - Choisissez une zone - - - </option>\n";
$reponseSalle = $bdd->query('SELECT * FROM mrbs_area ORDER BY area_name');



while ($donnees = $reponseSalle->fetch(PDO::FETCH_OBJ))
{
?>

<option value="<?php echo $donnees->id; ?>"> <?php echo $donnees->area_name; ?></option>
<?php
}

?>
</select>

<!-- Filtre par salle -->
<br /><br />

<label>Choisir la salle</label><br />

<select name="salle">

<?php

echo " <option unselected>- - - Choisissez une salle - - - </option>\n";
$reponseSalle = $bdd->query('SELECT * FROM mrbs_room ORDER BY room_name');



while ($donnees = $reponseSalle->fetch(PDO::FETCH_OBJ))
{
?>
<option value="<?php echo $donnees->id; ?>"> <?php echo $donnees->room_name; ?></option>
<?php
}

?>
</select>

<!-- Filtre par utilisateurs-->

<br /><br />

<label>Choisir l'utilisateur</label><br />

<select name="utilisateur">

<?php

echo " <option unselected>- - - Choisissez un utilisateur - - - </option>\n";
$reponseSalle = $bdd->query('SELECT * FROM mrbs_users ORDER BY name');



while ($donnees = $reponseSalle->fetch(PDO::FETCH_OBJ))
{
?>
<option value="<?php echo $donnees->id; ?>"> <?php echo $donnees->name; ?></option>
<?php
}

?>
</select>




<!-- Filtres par DatePicker -->
<br /> <br />
<script>
$(function() {



$( "#from" ).datepicker({
defaultDate: "+1d",
changeMonth: true,
numberOfMonths: 1,
dateFormat : '@',
onClose: function( selectedDate ) {
$( "#to" ).datepicker( "option", "minDate", selectedDate );
}
});
$( "#to" ).datepicker({
defaultDate: "+1w",
changeMonth: true,
numberOfMonths: 1,
dateFormat : '@',
onClose: function( selectedDate ) {
$( "#from" ).datepicker( "option", "maxDate", selectedDate );
var currentDate = $( ".selector" ).datepicker( "getDate" );
}
});
});
</script>

<label for="from">Du</label>
<input type="text" id="from" name="from">
<label for="to">Au</label>
<input type="text" id="to" name="to">



<input type='submit' value='Envoyer'><br /><br />

</form>


<!-- Traitement des données -->
<?php

/* Une salle seulement */

if (isset($_POST['salle'])){
$idSalle = $_POST['salle'];
echo('La salle séléctionnée est :' . $idSalle . '<br />');

var_dump($idSalle);

if ($idSalle == "- - - Choisissez une salle - - - ") {
$idSalle = "Non séléctionné";
echo('La salle séléctionnée est :' . $idSalle . '<br />');
}

}


/*
$idUtilisateur = $_POST['utilisateur'];
$dateDebut = $_POST["from"];
$dateFin = $_POST["to"];
echo('L utilisateur séléctionné est :' . $idUtilisateur . '<br />');
echo('La date de début séléctionnée est :' . $dateDebut . '<br />');
echo('La date de fin séléctionnée est :' . $dateFin . '<br />'); */
?>


<!-- Requêtage -->

<?php

?>
<?php
/*
$req = $bdd->prepare('SELECT count(*), ?
FROM mrbs_entry JOIN mrbs_room ON mrbs_entry.room_id = mrbs_room.id JOIN mrbs_area ON mrbs_room.area_id = mrbs_area.id
WHERE mrbs_entry.start_time BETWEEN UNIX_TIMESTAMP("'.$datedeb.'") and UNIX_TIMESTAMP("'.$datefin.'")
or mrbs_entry.end_time BETWEEN UNIX_TIMESTAMP("'.$datedeb.'") and UNIX_TIMESTAMP("'.$datefin.'")
and mrbs_entry.create_by like "'.$nomUtilisateur.'";');


$req->execute(array());

while ($donnees = $req->fetch())
{
echo '<li>' . $donnees['nom'] . ' (' . $donnees['prix'] . ' EUR)</li>';
}
echo '</ul>';

$req->closeCursor(); */
?>


</body>
</html>





When I add a var_dump($idSalle); here :

/* Une salle seulement */

if (isset($_POST['salle'])){
$idSalle = $_POST['salle'];
echo('La salle séléctionnée est :' . $idSalle . '<br />');

var_dump($idSalle);

if ($idSalle == "- - - Choisissez une salle - - - ") {
$idSalle = "Non séléctionné";
echo('La salle séléctionnée est :' . $idSalle . '<br />');
}

}


I got this response : string(32) "- - - Choisissez une salle - - -"

I tried to use trim() like that :

if (isset($_POST['salle'])){
$idSalle = trim($_POST['salle']);
echo('La salle séléctionnée est :' . $idSalle . '<br />');

var_dump($idSalle);

if ($idSalle == trim("- - - Choisissez une salle - - -")) {
$idSalle = "Non séléctionné";
echo('La salle séléctionnée est :' . $idSalle . '<br />');
}


But the result is the same.

So if anyone can help me to understand.. Thanks in advance.

Answer

I just figured it out.

The reason why your conditional statement is failing is because the option has no "value".

Change it to the following:

echo "      <option unselected value=\"- - - Choisissez  une salle - - - \">Choisissez une salle</option>\n";

So you can remove trim() and keep the space in there if you want.

However, you may want to remove the trailing space from it. If you do, you will need to do the same thing for the conditional statement.


Pass test and using an added else{...}

<?php 

if (isset($_POST['salle'])){
        $idSalle = $_POST['salle'];
        echo('La salle séléctionnée est :' . $idSalle  . '<br />');

        if ($idSalle == "- - - Choisissez  une salle - - - ") {
           /* DO NOT PASS HERE :( */

            $idSalle = "Non séléctionné";
            echo('La salle séléctionnée est :' . $idSalle  . '<br />');
        }
         else {
         echo "Xxxxxxxxxxxxx";
         }

      } 



?>

<form action="" method="POST">
    <br /><br />

<select name="salle">

    <?php

    echo "      <option unselected value=\"- - - Choisissez  une salle - - - \">Choisissez une salle</option>\n";
    echo "      <option value=\"123\">123</option>\n";
    ?>
    </select>

<input type='submit' value='Envoyer'><br /><br />

 </form>

Test - Removed trailing space in if ($idSalle == "- - - Choisissez une salle - - -")

Fail and using an added else{...}

<?php 

if (isset($_POST['salle'])){
        $idSalle = $_POST['salle'];
        echo('La salle séléctionnée est :' . $idSalle  . '<br />');

        if ($idSalle == "- - - Choisissez  une salle - - -") {
           /* DO NOT PASS HERE :( */

            $idSalle = "Non séléctionné";
            echo('La salle séléctionnée est :' . $idSalle  . '<br />');
        }
         else {
         echo "Xxxxxxxxxxxxx";
         }

      } 



?>

<form action="" method="POST">
    <br /><br />

<select name="salle">

    <?php

    echo "      <option unselected value=\"- - - Choisissez  une salle - - - \">Choisissez une salle</option>\n";
    echo "      <option value=\"123\">123</option>\n";
    ?>
    </select>

<input type='submit' value='Envoyer'><br /><br />

 </form>

Even on an HTML5 compliant browser.