[RESOLU] 3 listes derooulantes

Avatar du membre
Eléphanteau du PHP | 23 Messages

23 nov. 2016, 00:34

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>
Aide moi et Dieu t'aidera :mrgreen:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 nov. 2016, 10:43

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)


@+
Il en faut peu pour être heureux ......

Avatar du membre
Eléphanteau du PHP | 23 Messages

23 nov. 2016, 13:41

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
Aide moi et Dieu t'aidera :mrgreen:

Avatar du membre
Mammouth du PHP | 1564 Messages

23 nov. 2016, 15:24

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

Avatar du membre
Eléphanteau du PHP | 23 Messages

23 nov. 2016, 20:23

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
Aide moi et Dieu t'aidera :mrgreen:

Avatar du membre
Mammouth du PHP | 1564 Messages

23 nov. 2016, 23:34

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 ?

Avatar du membre
Eléphanteau du PHP | 23 Messages

24 nov. 2016, 15:01

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
Aide moi et Dieu t'aidera :mrgreen:

Avatar du membre
Mammouth du PHP | 1564 Messages

25 nov. 2016, 17:27

je peux te montrer un exemple avec jQuery si tu veux ?

Avatar du membre
Eléphanteau du PHP | 23 Messages

25 nov. 2016, 17:47

Ha bin si je veu !!!

mais bien sur que je veu !!
merci a toi
Aide moi et Dieu t'aidera :mrgreen:

Avatar du membre
Mammouth du PHP | 1564 Messages

25 nov. 2016, 18:03

je te prépare un exemple...

Avatar du membre
Mammouth du PHP | 1564 Messages

25 nov. 2016, 18:40

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:

Avatar du membre
Eléphanteau du PHP | 23 Messages

25 nov. 2016, 20:14

merci Twod33
je met ça en pratique et je te met un retour !
Aide moi et Dieu t'aidera :mrgreen:

Avatar du membre
Eléphanteau du PHP | 23 Messages

25 nov. 2016, 20:44

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>
Modifié en dernier par Domy59 le 25 nov. 2016, 22:13, modifié 1 fois.
Aide moi et Dieu t'aidera :mrgreen:

Avatar du membre
Mammouth du PHP | 1564 Messages

25 nov. 2016, 22:06

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

Avatar du membre
Mammouth du PHP | 1564 Messages

25 nov. 2016, 22:08

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 ;)