Page 1 sur 3

3 listes derooulantes

Posté : 23 nov. 2016, 00:34
par Domy59
Bonjour,
j'ai un formulaire avec 3 listes déroulantes(5 par la suites), elles reçoivent les Données d'une base,
jusque la tout va bien, là ou ca colle plus, chaque fois que je clique dans une liste la précèdent perd son affichage??
un petit coups de pouce ne serait pas de trop,
merci

Code : Tout sélectionner

<?php if(isset($_POST['liste1'])) { $liste1=$_POST['liste1']; } else { $liste1=-1; } if(isset($_POST['liste2'])) { $liste2=$_POST['liste2']; } else { $liste2=-1; } if(isset($_POST['liste3'])) { $liste3=$_POST['liste3']; } else { $liste3=-1; } echo" $liste1 &nbsp; $liste2 &nbsp; $liste3 "; ?> <?php $id= $_GET['idd']; $db = new PDO('mysql:host=localhost;dbname=@@@@@', '@@@@@', '@@@@@'); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "SELECT * FROM Comp_Equipes ORDER BY ID ASC"; $stmt = $db->query($sql); $rows = $stmt->fetchall(PDO::FETCH_ASSOC); ?> <table width="600" border="0" cellspacing="0" cellpadding="0"> <tr> <td height="2">&nbsp;</td> <td height="2">&nbsp;</td> <td height="2">&nbsp;</td> </tr> <tr align="center"> <td>S&eacute;lectionnez un(e) Equipe :</td> <td>un(e) Poule :</td> <td>une Catégorie :</td> </tr> <tr align="center"> <td width="219"> <!-- CREATION DU FORMULAIRE EQUIPE --> <form name="form1" method="post" action=""> <select name="liste1" onchange=" form1.submit();"> <option value=-1>-- Choisissez -- </option> <?php foreach($rows as $row): //Liste déroulante { echo "<option value=\"".$row['Club']."\""; if($liste1==$row['Club']) { echo "selected"; } //ça c'est pour garder la selection lors du réaffichage echo ">".$row['Club']."</option>\n"; } endforeach; ?> </select> </form> <td width="187"> <!-- CREATION DU FORMULAIRE EQUIPE --> <form name="form2" method="post" action=""> <select name="liste2" onchange=" form2.submit();"> <option value=-1>-- Choisissez -- </option> <?php foreach($rows as $row): //Liste déroulante { echo "<option value=\"".$row['Equipe']."\""; if($liste2==$row['Equipe']) { echo "selected"; } //ça c'est pour garder la selection lors du réaffichage echo ">".$row['Equipe']."</option>\n"; } endforeach; ?> </select> </form> </td> <td width="192"> <!-- CREATION DU FORMULAIRE EQUIPE --> <form name="form3" method="post" action=""> <select name="liste3" onchange=" form3.submit();"> <option value=-1>-- Choisissez -- </option> <?php foreach($rows as $row): //Liste déroulante { echo "<option value=\"".$row['Sexe']."\""; if($liste3==$row['Sexe']) { echo "selected"; } //ça c'est pour garder la selection lors du réaffichage echo ">".$row['Sexe']."</option>\n"; } endforeach; ?> </select> </form> </td> </tr> </table>

Re: 3 listes derooulantes

Posté : 23 nov. 2016, 10:43
par moogli
salut,

pourquoi soumettre le formulaire à chaque fois ?
c'est inutile, laisse l'utilisateur finir ces choix.

si les contenus des listes sont liées utilises du javascript faq-tutoriels/listes-liees-avec-html-ja ... 55580.html

sinon le problème c'est que tu as un formulaire par liste du coup quand tu soumets un formulaire tu as les données des champs lié au formulaire que tu soumets et pas les autres.

la solution c'est de virer les formulaire inutiles. (un seul qui entoure la table).

Pour la selection tu peux alléger ton code et supprimer la liste de if / else en haut :

Code : Tout sélectionner

<?php if (!empty($_POST['liste3']) && $_POST['liste3']==$row['Sexe']) { echo 'selected="selected"'; } ?>
Pour info, la mise en page avec les tables c'est pas le mieux :-) (=> css)


@+

Re: 3 listes derooulantes

Posté : 23 nov. 2016, 13:41
par Domy59
Merci pour ton aide Moogli!!
juste une précision pour ce qui est des Css, ils sont bien présent, j'ai des beaux tableaux avec des lignes de couleurs alternées :D
j'ai pas mis tout le code de ma page!!

maintenant concernant les listes, elles me permettent de créer des groupes d'équipes avec des choix multiples :
liste 1 "régionale (1)(2) ..., nationale(1)(2)..., départementale(1)(2).., etc..
Liste 2 "Poule 1, 2, 3 ..."
Liste 3 " Féminin, Masculin"
plus 2 ou 3 autre liste que je dois ajouter.
donc je dois faire un click dans chaque liste et garder le choix pour lancer ma requête d'ajout dans une base de donné.
et ensuite visualiser un tableau(qui n'est pas celui du dessous pour le moment!)

peut être est ce un peu plus clair comme explication?

encore merci pour ton aide.
Amicalement, Domy

Re: 3 listes derooulantes

Posté : 23 nov. 2016, 15:24
par two3d
Salut,

te faudra passer par javascript pour afficher l'autre tableau qui correspond au premier choix dans la liste déroulante qui est affichée en premier.

Tu cache les listes déroulante de second choix avec un css display:none puis tu affiche la liste correspondante suivant le choix fait dans la liste affichée en premier avec display:block

Re: 3 listes derooulantes

Posté : 23 nov. 2016, 20:23
par Domy59
Merci de ton aide twod3 !
je ne comprend pas bien ton message ou toi le mien lol

Ma 1er liste n'a pas de lien avec la 2eme ni la 2eme avec la 3eme etc..
elle se remplissent indépendamment des tables sélectionnées, ce choix dans chaque liste me servira à créer des équipes,
exemple : Régionale 1 , poule 2, Dames, Dupont, Jean, 1200, capitaine ..... etc

Aurais tu un exemple travaillant avec plusieurs listes tout en utilisant du java comme tu le préconise et qui n'afficherait la liste suivante le choix fait,
merci d'avance.
amicalement, Domy

Re: 3 listes derooulantes

Posté : 23 nov. 2016, 23:34
par two3d
regarde sur le site leboncoin par exemple, quand tu clic sur "déposer une annonce", tu arrive au formulaire, tu choisi par exemple "voitures" dans la liste "catégorie" et là tu verra des options s'afficher juste en dessous.

C'est bien de ce type de fonction que tu parle ?

Re: 3 listes derooulantes

Posté : 24 nov. 2016, 15:01
par Domy59
Voila c'est tout a fait ca que je cherche a faire !
c'est plus clair avec cette exemple !
Merci twp3d, tu aurais dans un coin de ton pc un truc comme ça qui traîne, lol
j'ai un exemple qui fonctionne mais sur 2 listes et là je bloque
merci pour ton aide,
Cdt domy

Re: 3 listes derooulantes

Posté : 25 nov. 2016, 17:27
par two3d
je peux te montrer un exemple avec jQuery si tu veux ?

Re: 3 listes derooulantes

Posté : 25 nov. 2016, 17:47
par Domy59
Ha bin si je veu !!!

mais bien sur que je veu !!
merci a toi

Re: 3 listes derooulantes

Posté : 25 nov. 2016, 18:03
par two3d
je te prépare un exemple...

Re: 3 listes derooulantes

Posté : 25 nov. 2016, 18:40
par two3d
Voila, j'espère que ça pourra t'aider, j'ai commenté au max le js pour que comprenne:
<select id="liste1" name="nomdelaliste1">
	<option>Votre choix:</option>
	<option value="choix1">choix1...</option>
	<option value="choix2">choix2...</option>
	<option value="choix3">choix3...</option>
</select>

<select class="liste1" id="liste1_choix1" name="nomdelaliste1_1" style="display:none">
	<optgroup label="choix 1">
		<option value="choix1">choix1...</option>
		<option value="choix2">choix2...</option>
		<option value="choix3">choix3...</option>
	</optgroup>
</select>

<select class="liste1" id="liste1_choix2" name="nomdelaliste1_2" style="display:none">
	<optgroup label="choix 2">
		<option value="choix1">choix1...</option>
		<option value="choix2">choix2...</option>
		<option value="choix3">choix3...</option>
	</optgroup>
</select>

<select class="liste1" id="liste1_choix3" name="nomdelaliste1_3" style="display:none">
	<optgroup label="choix 3">
		<option value="choix1">choix1...</option>
		<option value="choix2">choix2...</option>
		<option value="choix3">choix3...</option>
	</optgroup>
</select>
<script>
$("select#liste1").on("change",function(){
	//on récupère l'id du select:
	var idselect=$(this).attr("id"),
		valeurchoisie=$(this).val(),
		idliste=idselect+"_"+valeurchoisie; //liste1_choixX
	if(valeurchoisie!="Votre choix:"){//pour valider le premier choix, sinon faudrait utiliser autre chose que on("change") mais dans l'immédiat et quelques chose de simple, je ne vois pas
		//on affiche la liste correspondante au choix:
		$("#"+idliste).css("display","block");
		//on cache les autres listes si elles ont été affichées:
		$("select.liste1").each(function(){
			if ($(this).attr("id")!=idliste){
				$(this).hide();
			}
		});
	}
});
</script>
n’oublie pas d'inclure la lib jquery :wink:

Re: 3 listes derooulantes

Posté : 25 nov. 2016, 20:14
par Domy59
merci Twod33
je met ça en pratique et je te met un retour !

Re: 3 listes derooulantes

Posté : 25 nov. 2016, 20:44
par Domy59
Re merci pour ton aide,

je reviens vers toi, car y a une erreur et j'ai essayé de comprendre mais je ne trouve pas.
la page s'affiche avec une liste, je suppose que lorsque je fait le choix d'autre listes devraient apparaître mais rien ne ce passe.
l'erreur est déclarée sur la page du code .js je te met le message dessous .

Erreur de syntaxe à la ligne 4. il se peut que les indications de code ne fonctionne qu'apres la résolution de cette erreur.

Code : Tout sélectionner

1. <script> 2. $("select#liste1").on("change",function(){ 3. //on récupère l'id du select: 4. var idselect=$(this).attr("id"), 5. valeurchoisie=$(this).val(), 6. idliste=idselect+"_"+valeurchoisie; //liste1_choixX 7. if(valeurchoisie!="Votre choix:"){//pour valider le premier choix, sinon faudrait utiliser autre chose que on("change") mais dans l'immédiat et quelques chose de simple, je ne vois pas 8. //on affiche la liste correspondante au choix: 9. $("#"+idliste).css("display","block"); 10. //on cache les autres listes si elles ont été affichées: 11. $("select.liste1").each(function(){ 12. if ($(this).attr("id")!=idliste){ 13. $(this).hide(); 14. } 15. }); 16. } 17. }); </script>
je compte sur toi pour corriger

PS : la sintaxe pour activer le JS est bien

Code : Tout sélectionner

<script src="liste.js"></script>

Re: 3 listes derooulantes

Posté : 25 nov. 2016, 22:06
par two3d
Apparemment mon commentaire à sauter une ligne:

Code : Tout sélectionner

//pour valider le premier choix, sinon faudrait utiliser autre chose que on("change") mais <- ici il passe à la ligne suivante, tu peux enlever ce commentaire si tu veu ou le mettre entre les balises de commentaires multi lignes /* comment */ 8. dans l'immédiat et quelques chose de simple, je ne vois pas

Re: 3 listes derooulantes

Posté : 25 nov. 2016, 22:08
par two3d
Un module firefox qui est bien pratique pour débuger c'est firebug, je te met le lien: https://addons.mozilla.org/fr/firefox/addon/firebug/ quand tu l'active, il va se placer en bas de la page, t'aura juste à aller dans l'onglet "Console" du module pour voir si il y a des erreurs ;)