Echo ne s'affiche pas

Résolu/Fermé
momo-ben2A Messages postés 105 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 19 décembre 2010 - 24 août 2009 à 00:17
momo-ben2A Messages postés 105 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 19 décembre 2010 - 24 août 2009 à 11:18
bonsoir a tous.
Je m'entraine en php et je rencontre acutellement un probleme.
Lorsque je rentre le mot de passe et que je selectionne la couleur que je prefere sa marche.
Mais le probleme c'est que l'echo de la ligne numero 56 ne veux pas s'afficher et je n'arrive pas a comprendre pourquoi.
Pouvez vous m'aider ?
Dans l'attente d'une reponse de votre part je vous remercie d'avance.

Voici le script
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Bienvenue sur le future site de momo-ben2A </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

</head>
<body>
<form method="post" action="choix_des_couleurs.php">
<input type="password" name="mdp"/><br/>
<input type="submit"/><input type="reset"/>
</form>

<?php if ($_POST['mdp'] == 'momo-ben2A')
{
?>

<form method="post" action="choix_des_couleurs.php">

<label>quelle est votre couleur preferer</label><br/>
<select name="couleur">
<optgroup label="couleurs">
<option value="bleu">bleu</option>
<option value="rouge">rouge</option>
<option value="jaune">jaune</option>
<option value="vert">vert</option>
<option value="orange">orange</option>
</optgroup>
</select>
<input type="submit" value="Valider"/>
</form>




<?php

if (isset($_POST['couleur']))

{

mysql_connect ('localhost', 'root', '');
mysql_select_db ('choix_internaute');

$choix_couleur_internaute = mysql_real_escape_string(htmlspecialchars($_POST['couleur']));
mysql_query("INSERT INTO choix VALUES ('', '$choix_couleur_internaute')");
mysql_close();
?>

<?php
mysql_connect ('localhost', 'root', '');
mysql_select_db ('choix_internaute');
$recup = mysql_query ("SELECT choix_par_internaute FROM choix ORDER BY id DESC ") or die (mysql_error());
$donnees = mysql_fetch_array($recup);

echo 'Votre couleur preferée est le : '. $donnees['choix_par_internaute'];

mysql_close();
}




?>
<br/>
pour revenir, cliquez <a href="choix_internautes.html">ici</a>
<?php
} ?>
</body>
</html>

6 réponses

Bonjour

Dans ton script, tu as deux formulaires
Dans le premier, tu saisis le mot de passe et dans le second tu choisis la couleur.
Mais tu ne peux envoyer qu'un seul formulaire à la fois.
Donc, soit, le mot de passe est saisi, soit la couleur, mais pas les deux.
Or ta ligne if (isset($_POST['couleur'])) est à l'intérieur du if ($_POST['mdp'] == 'momo-ben2A'), donc elle n'est jamais vraie.
Solution possible : rajouter le champ le champ mdp dans le formulaire de saisie de la couleur, en champ de type hidden :
...</select>
<input type="hidden" name="mdp" value="<?php echo $_POST['mdp']?>" />
<input type="submit" value="Valider"/>...
0
momo-ben2A Messages postés 105 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 19 décembre 2010 9
24 août 2009 à 10:11
Je te remercie pour ton aide. Mais il y a une chose que je ne comprend pas dans ton explication. C'est cet extrait
"ta ligne if (isset($_POST['couleur'])) est à l'intérieur du if ($_POST['mdp'] == 'momo-ben2A'), donc elle n'est jamais vraie. ". Je ne comprend pas car lorsque l'on choisi la couleur, la variable est créee donc la condition est valable.
Voila c'est sa que j'ai pas compris.
Je te remercie d'avance pour ton explication
0
Lorsqu'on choisit la couleur, $_POST['couleur'] est créée, mais pas $_POST['mdp'] car mdp ne provient pas du même formulaire que couleur.

Quand tu exécutes ton script, la première fois, aucune des deux variables n'exite, tu n'affiches que le formulaire pour le mot de passe.
Quand tu saisis ton mot de passe, et que tu cliques sur le bouton submit, tu envoies le formulaire ce qui exécute le script une deuxième fois. Là, $_POST['mdp'] est défini mais pas encore $_POST['couleur'], tu es d'accord ? Ton script affiche maintenant (si le mot de passe est bon) le formulaire de choix de couleur
Tu choisis la couleur et tu cliques sur le bouton submit. Tu envoies donc le formulaire de choix de couleur, ce qui exécute ton script une troisième fois. Le formulaire que tu envoies contient bien couleur, mais il ne contient pas mdp. Donc $_POST['mdp'] n'est pas défini.
Car chaque exécution du script est indépendante des pércédentes, du moins elle ne conserve pas les variables. Pour les conserver, tu peux utiliser les sessions, oun pour un cas simple comme le tien, envoyer la donnée manquante comme champ caché.
0
momo-ben2A Messages postés 105 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 19 décembre 2010 9
24 août 2009 à 10:42
et donc le hidden permet de se souvenir du mot de passe dans le script couleur se qui remplirai donc la premiere condition c'est bien cela ? Et si j'ai bien compris a chaque fois qu'on envoie un formulaire, tout reviens a 0 (corrige moi si je me trompe).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
je crois que tu as tout compris.
Chaque fois qu'on envoie un formulaire, le script démarre de zéro, il n'a aucun souvenir des exécutions précédentes. Comme n'importe quel programme de n'importe quel langage, d'ailleurs (il . Si tu veux tenir compte des exécutions précédentes, à toi de te débrouiller pour "mettre de côté" ce qui risque de te resservir. Dans ton cas, le champ hidden est tout à fait adapté.
0
momo-ben2A Messages postés 105 Date d'inscription lundi 10 août 2009 Statut Membre Dernière intervention 19 décembre 2010 9
24 août 2009 à 11:18
oui je l'ai mis dans le champ couleur je te remercie beaucoup, cette fois, je n'oublirai pas que a chaque fois le script recommence des le debut merci
0