"selected" dans l'option d'une boucle liste déroulante

Petit nouveau ! | 6 Messages

15 juin 2012, 23:33

bonjour,
je pense avoir un gros soucis de "syntaxe" avec mon code. Quand j'envoie le formulaire qui comporte des erreurs il doit me mémoriser les valeurs choisies par le visiteur pour lui éviter de les retaper (ici, le jour de sa naissance).

voici mon code de la page de formulaire:

<?php 
session_start();
?>
		<p>Votre date de naissance:</p>	
<select name="jnaissance" id ="jnaissance" >
		<?php	
		$_POST['jour']=$_SESSION['form']['jour'];
		for ($i=1;$i<=31;$i++)	
				{
				if ($i==$_POST['jour']) echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
				else echo '<option value="'.$i.'">'.$i.'</option>';
				}
		?>
</select>



et voici le code de la page de traitement de ce formulaire:
<?php 
session_start();
$_SESSION['erreur']='';
$_SESSION['form']='';
?>
	<?php	if (isset($_POST['jour']) and !empty($_POST['jour']))
			{
			$_SESSION['form']['jour']=$_POST['jour'];
			}
      ?>
pourrier vous m'aider svp?
merci!

ViPHP
xTG
ViPHP | 7331 Messages

16 juin 2012, 00:03

$_SESSION['form']='';
Qui devrait être ceci :
$_SESSION['form']=array();
au vu de son utilisation par la suite.

Ensuite je vois un session_start() suivit d'un code HTML. Sauf que c'est une balise p.
Donc ta page ne contient aucune balise html et encore moins body ?
Ou bien tu as fait l'erreur de mettre un session_start() après du code HTML ou affichage php ?
Cette fonction doit être la première exploité par le serveur dans l'envoi de la requête.
Elle doit donc se trouver avant tout affichage.

Eléphant du PHP | 171 Messages

16 juin 2012, 00:12

Un petit oubli dans ton select. Tu aurais du faire un affichage de ton $_POST dans ta condition, tu aurais vite compris ton erreur.
<select name="jnaissance" id ="jnaissance" >
Tu essaye de récupérer $_POST['jour'], donc si tu dis que le name de ton select c'est jnaissance, ça ne peut pas le faire :p

Bonne soirée
Le bon jugement s'apprend par l'expérience qui s'acquiert en partie par le mauvais jugement.

Petit nouveau ! | 6 Messages

16 juin 2012, 17:11

pfff, je crois que je n'y comprends vraiment rien au php !!!!

je te redonne mes codes sans les simplifications, j'ai un body etc etc mais je n'avais pas tout noté pour ne pas allourdir le code.
mon session_start est bien en début de page.en tout premier.
Quand je fais une liste déroulante "à la main" sans faire de boucle, j'arrive à garder en mémoire la valeur sélectionnée par le visiteur, mais dès que je veux passer par la boucle, c'est un grand moment de solitude pour moi!!!!

voici à nouveau le code pour que tu y voies plus clair:

page testforma.php qui contient le formulaire:
<?php 
session_start();
?>

<section>

<h2>Nouveau ?</h2>
<form id="inscription" method="post" action="testformb.php">

<fieldset id="form1">
	<legend>Inscription :</legend>
			
			
<label for="pseudo">Nom d'utilisateur:</label>
<input type="text" name="pseudo" id="pseudo" value="<?php if (isset($_SESSION['form']['pseudo']) AND !empty($_SESSION['form']['pseudo'])) echo $_SESSION['form']['pseudo']; ?>"/>
	<br />
<?php
if (isset($_SESSION['erreur']['pseudo']) AND !empty($_SESSION['erreur']['pseudo']))							echo $_SESSION['erreur']['pseudo'];
?>
					
</fieldset>

<fieldset id="form2">
			<!--date naissance-->
	<p>Votre date de naissance:</p>	
<select name="jnaissance" id ="jnaissance">
		<?php	
			$_POST['jnaissance']=$_SESSION['form']['jnaissance'];
			for ($i=1;$i<=31;$i++) 
                                {
                                if ($i==$_POST['jnaissance']) echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
                                else echo '<option value="'.$i.'">'.$i.'</option>';
                                }
                  ?>		
</select>
			<p class="envoyer">
			<input type="submit" value="Envoyer" title="Envoyer"/>
			</p>			
</fieldset>



</form>

</section>





et voici la page de traitement testformb.php
<?php 
session_start();
$_SESSION['erreur']='';
$_SESSION['form']='';
?>

<?php
echo '<pre>';
print_r($_POST);
echo '</pre>';
?>

<?php	//si pseudo mauvais
		if (empty($_POST['pseudo']) or strlen($_POST['pseudo'])>15 or strlen($_POST['pseudo'])<=3)
			{
			$_SESSION['erreur']['pseudo']='<p class="erreur">Merci de renseigner un pseudo comportant moins de 15 caractères.</p>';
			}
		else
			{
			$_SESSION['form']['pseudo']=htmlspecialchars($_POST['pseudo']);
			}
		//si date naisssance sélectionner, la garder en mémoire
		if (isset($_post['jnaissance']) and !empty ($_POST['jnaissance']))
			{
			$_SESSION['form']['jnaissance']=$_POST['jnaissance'];
			}
			
	//si aucune erreur		
			
if(empty($_SESSION['erreur']))
{
			$bienvenue1='<p class="pas_erreur">Bienvenue '.$_POST['pseudo'].'. Votre inscription est maintenant effective. Vous pourrez accéder au forum, laisser des commentaires et poster vos séances.<br /> Vérifiez vos entrées ci-dessous:</p>';
			//on vide variables de session
			$_SESSION['erreur']='';$_SESSION['form']='';
}	
else
{
header('location:testforma.php');
exit();
}

?>
			<p class="envoyer">
			<a href="testforma.php"><input type="submit" value="Recommencer" title="retour inscription"/></a>
			</p>

voilou! avec toutes les boulettes qu'il comporte!
j'ai laissé le champ pseudo, car dans mes tests, il me permet de mettre cette valeur comme fausse et donc me retourne le formulaire.