boucle if ne fonctionne pas

Petit nouveau ! | 4 Messages

04 déc. 2011, 23:30

Bonjour, j'ai besoin d'aide car mon if ne fonctionne pas, j'ai mis plusieurs balises echo pour tester les valeurs des variables de mon if. Le problème est que même quand les 2 valeurs sont égales tout passe dans le else merci de votre aide.
<?php
if(isset($_POST['listexercice']))
{
$exe_code=$_POST['listexercice'];
echo 'form';
echo $exe_code;
}
else
{
echo 'vide';
$exe_code=0;
echo $exe_code;
}
?>

<td>
<label for="listexercice">exercice : </label>
</td>
<td>
<select name="listexercice" id="listexercice">
<?php



$reponselistexe = $bdd->query('SELECT * FROM exercice order by exe_nom');

/*recuperation de toutes les valeurs de la table exercice*/
while ($donneeslistexe = $reponselistexe->fetch())
{
?>
<option value=" <?php echo $donneeslistexe['exe_id']; ?> "
<?php

if ($donneeslistexe['exe_id'] == $exe_code)
{
echo " 'selected' ";
echo $donneeslistexe['exe_id'];
echo "ok";
echo $exe_code;
}
else
{
echo $donneeslistexe['exe_id'];
echo "tst";
echo $exe_code;
}

?>
>
<?php echo $donneeslistexe['exe_nom']; ?> </option>
<?php } ?>
</select>
</td>

ViPHP
xTG
ViPHP | 7331 Messages

04 déc. 2011, 23:37

Et avec strlen() les deux variables ont-elles la même longueur ?

Petit nouveau ! | 4 Messages

04 déc. 2011, 23:48

Merci pour la réponse rapide, je viens de tester les 2 variables renvoient la même valeur avec strlen. Mais il y a une chose bizarre strlen renvoie bien la taille de la variable non? car strlen renvoie 3 alors que mes variables contiennent le chiffre 2

ViPHP
xTG
ViPHP | 7331 Messages

05 déc. 2011, 07:26

Hum pas malin de ma part de t'avoir proposé ça alors que tu fixes à 0 manuellement dans un cas.
Regardes plutôt avec var_dump(), cela te donnera le type de variable et si c'est un string la longueur.
Parce qu'à priori il y a peut être des caractères non imprimables qui sont là en trop.

Eléphanteau du PHP | 49 Messages

05 déc. 2011, 12:22

Bonjour,
Pour simplifier ton debuggage, je commenterais le 1er if() {}else{}.
Au moins tu écartes le fait de modifier la valeur de ta variable $exe_code.

J'ai rajouté à ton code qqes lignes de debuggage, ça renvoie quoi dans ton navigateur?

Code : Tout sélectionner

<td> <label for="listexercice">exercice : </label> </td> <td> <select name="listexercice" id="listexercice"> <?php $reponselistexe = $bdd->query('SELECT * FROM exercice order by exe_nom'); /*recuperation de toutes les valeurs de la table exercice*/ while ($donneeslistexe = $reponselistexe->fetch()) { ?> <option value=" <?php echo $donneeslistexe['exe_id']; ?> " <?php [b]//DEBUT DEBUGGAGE echo '$donneeslistexe[\'exe_id\'] vaut : [.'$donneeslistexe['exe_id'].']<br />'; echo '$_POST[\'listexercice\'] vaut : [.'$_POST['listexercice'].']<br />'; echo '<pre>'; var_dump($donneeslistexe['exe_id']); var_dump($_POST['listexercice']); echo '</pre>' //FIN DEBUGGAGE[/b] if ($donneeslistexe['exe_id'] == $exe_code) { echo " 'selected' "; echo $donneeslistexe['exe_id']; echo "ok"; echo $exe_code; } else { echo $donneeslistexe['exe_id']; echo "tst"; echo $exe_code; } ?> > <?php echo $donneeslistexe['exe_nom']; ?> </option> <?php } ?> </select> </td>
PS : je n'ai pas testé le code rajouté, il y a peut être des fautes de syntaxe

Petit nouveau ! | 4 Messages

06 déc. 2011, 00:06

Merci pour vos contributions, je viens de tester les 2 méthodes

la méthode de Xtg renvoie la même chose:

string ' 1 ' (length=3)
string ' 1 ' (length=3)


la méthode de liens_geeks renvoie

string ' 1 ' (length=1)
string ' 1 ' (length=3)

J'en déduis donc que mes variables n'ont pas la même longueur, mais pourquoi? mystère... si je mets mon formulaire en méthode GET voilà ce qui s'affiche dans la barre d'adresse du navigateur .......&listexercice=+1+ la variable listeexercice est ma balise <select> passée en paramètre.

Mammouth du PHP | 2278 Messages

06 déc. 2011, 00:41

une méthode bête:

print "==>$execode<====>$donneeslistexe['exe_id']<==";
Une suggestion pour éviter cet enchevêtrement de <?php..; ?>
c'est de :
$le_select = <select name='listexercice' id='listexercice'>";
while ($donneeslistexe = $reponselistexe->fetch())
{
   $exe_id = $donneeslistexe['exe_id'] ;
    $exe_nom = $donneeslistexe['exe_nom'];
   print "==>$execode<====>$exe_id<=="; // les <==> IMPORTENT
   $selected = ($exe_id == $execode) ? "selected= 'selected'": "";
    $le_select .= <option value='$exe_id'  $selected>$exe_nom </option>";
}
$le_select .= "</select>";
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 4 Messages

06 déc. 2011, 01:33

Merci beaucoup, même si je n'ai pas tout compris au code je l'ai mis en place (un petit peu corrigé la syntaxe :wink: ) et cela fonctionne !!

Merci à tous les contributeurs et au temps passé sur mon problème, c'est la première fois que je poste, j'espère ne pas trop avoir besoin de posté.