Garder choix "SELECTED"

Résolu
Heaton -  
 Heaton -
Bonjour,

J'ai créé (du moins j'essaye) un formulaire dynamique dans lequel, après avoir sélectionné dans une première liste déroulante le type d'infrastructure, d'autres listes déroulantes s'affichent relatives aux choix effectués.

J'aimerais que lors du submit de la première liste que le choix sélectionné soit SELECTED, il me semble qu'il est possible de faire ça grâce aux cookies mais je n'y arrive pas ...

Quelqu'un aurait-il une autre solution ? Ou bien quelqu'un pourrait-il m'expliquer comment faire fonctionner les cookies.

Je suis débutant en php, j'espère que ma question n'est pas bête.

5 réponses

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
pas besoin de cookies

une methode

<?php
//on recupere le choix de la liste1 si postée sinon vide
if(isset($_POT['liste1'])) {	$choix_liste1=$_POT['liste1'];}else{ 	$choix_liste1="";}

?>
<select name="liste1">
	<option value="1" <?php if($choix_liste1==1) { echo 'seleted="selected"'; } ?> >1</option>
	<option value="2" <?php if($choix_liste1==2) { echo 'seleted="selected"'; } ?> >2</option>
	<option value="3" <?php if($choix_liste1==3) { echo 'seleted="selected"'; } ?> >3</option>


</select>
0
Heaton
 
Bonjour,

Merci pour ta réponse, j'ai essayé d'adapter ta méthode à ma sauce mais ça ne fonctionne toujours pas.

Je poste mon code afin qu'il soit plus facile de trouver ou ça ne fonctionne pas :

<?php 
$inf="infrastructure";
$typeinf="typeInfra";
$hôte="localhost";
$user="root";
$mdp="";
$bdd="infraname";
$connexion=mysql_connect($hôte,$user,$mdp)
or die ("Echec de la connexion au serveur ! Vérifiez que les informations sont correctes"); // test de la connexion


if($connexion) { // connexion réussie

	mysql_select_db($bdd,$connexion);
	echo '<center>';
	echo '<form action="" method="post">';
	echo '<b>'.'<center>'."Veuillez sélectionner l'infrastructure que vous souhaitez nommer".'</b>';
	echo '<select name="$inf" id="$inf" size="1" onChange="submit();">'; 
	$requete="select * from $inf order by $typeinf;"; // sélection des infrastructures depuis la bdd
	$resultat=mysql_query($requete,$connexion);
	$ligne=mysql_fetch_assoc($resultat);
	
	function selected($inf,$typeinf) {
	if($ligne[$typeinf]==$_POST[$inf]) {
	$selected=$_POST[$inf];
	return $selected;
	}
	}

	if(isset($_POST['infrastructure'])) { 	
			$s=selected($inf,$typeinf);
			
			echo $_POST['infrastructure'];
					while($ligne)
					{
						if($ligne==$s)
						{
							echo  '<option selected value="'.$ligne["typeInfra"].'">'.$ligne["typeInfra"].'</option>';
							$ligne=mysql_fetch_assoc($resultat);				
						}
						else 
						{
							echo  '<option value="'.$ligne["typeInfra"].'">'.$ligne["typeInfra"].'</option>';
							$ligne=mysql_fetch_assoc($resultat);
						}
					}
	}
	else 
	{
		while($ligne)
		{
			
			echo  '<option value="'.$ligne["typeInfra"].'">'.$ligne["typeInfra"].'</option>';
			$ligne=mysql_fetch_assoc($resultat);
		}
	}

	'</select>';
	?>
0
Heaton
 
Petite correction : il manque un echo à la toute fin ( echo '</select>'; )
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
voir commentaires

<?php 
//parametres de configuration
//si tu initialise ceratians de ces param à une valeur il vaut mieux utiliser la variable ensuite (ex $inf  au mieu de 'infrastructure')
$inf="infrastructure";
$typeinf="typeInfra";
$hôte="localhost";
$user="root";
$mdp="";
$bdd="infraname";
////fonctions php, c'est mieux de les mettre au debut, bien que ça ne modifie pas le fonctionnement
//je ne me suis pas servis de ta fonction, ça complique inutilement
function selected($inf,$typeinf) {
	if($ligne[$typeinf]==$_POST[$inf]) {
	//ci dessu tu utilises la varaible tableau $ligne, tu ne l'a pas passée à la fonction !
		$selected=$_POST[$inf];
	return $selected;
	}
}
////	
$connexion=mysql_connect($hôte,$user,$mdp)
or die ("Echec de la connexion au serveur ! Vérifiez que les informations sont correctes"); // test de la connexion


if($connexion) { // connexion réussie

	mysql_select_db($bdd,$connexion);
	
	echo '<center>';
	echo '<form name="form1" action="" method="post">';
	echo '<b>'.'<center>'."Veuillez sélectionner l'infrastructure que vous souhaitez nommer".'</b>';
	 
	//ci dessus si une chaine commence et finit par ' les variables dedans ne sont pas interprétées (ex si tu affiche le code source de ta page tu avait name=$inf
	$requete="SELECT * FROM $inf ORDER BY $typeinf;"; // sélection des infrastructures depuis la bdd
	$resultat=mysql_query($requete,$connexion) or die ("Pb avec la requette :".mysql_error());
	//  $ligne=mysql_fetch_assoc($resultat); 
	// je supose que si tu fais un ORDER BY c'est que tu as plusieurs enr, donc la ligne ci dessu va sortir le premier et placer le pointeur en 2, donc le while ensuite va commencer en 2, donc il te manquerera l'affichage du premier
	
	if(isset($_POST[$inf]) { 	//voir remarque du début de page
		//si submit suite à choix dans liste1
		$choix_liste1=$_POST[$inf];	
	}else{
		//sinon c'est le premier affichage de la liste
		$choix_liste1="";//on l'initialise à vide,	donc par defaut ce sera la premiere ligne qui sera selected
	}

	////affichage de liste1
	echo '<select name="'.$inf.'" id="'.$inf.'" size="1" onChange="submit();">';
	
		while($ligne=mysql_fetch_assoc($resultat)){
			//debut de la ligne d'option
			echo  '<option value="'.$ligne['typeInfra'].'"';
			
			//si le choix posté est églal à la value de cette ligne on la met seleted
			if($choix_liste1==$ligne['typeInfra']) echo 'selected="selected"';
			
			//suite ligne d'option
			echo ' >'.$ligne['typeInfra'].'</option>';
		}

	echo '</select>';
}
	?>
0

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

Posez votre question
Heaton
 
Merci Alain, je n'avait pas fait attention au fait que j'utilise $ligne dans ma fonction et que je ne l'ai pas en argument !
0