3 listes déroulantes liées

Petit nouveau ! | 3 Messages

27 juin 2008, 12:14

Bonjour à tous et merci d'avance pour vos réponses.
Voici mon pb : j'ai utilisé le script de http://www.phpfrance.com/forums/voir_sujet-4562.php, méthode 100% Php, qui est un exemple pour 2 listes déroulantes liées et je voudrais en créer une 3ème dépendante de la 2nde. Comment puis-je faire ?
J'ai essayé d'adapter le code pour la création de la 3ème liste mais je bloque. Je sélectionne la 1ère liste, la 2nde se charge correctement, je sélectionne dans ma 2nde liste, la 3ème se charge mais la 2nde repointe sur le haut de la liste alors que la 1ère liste reste bien sur le bon choix ???
Merci pour votre aide !

Mammouth du PHP | 1353 Messages

27 juin 2008, 13:09

Bonjour,

Sans ton code cela va être dur de t'aider... montre nous la fonction que tu appelles pour la création des valeurs de la 3eme liste et éventuellement tout ce qui pourrait impacter la seconde liste...

Petit nouveau ! | 3 Messages

30 juin 2008, 18:15

Voici le code de ma page :

Code : Tout sélectionner

<?php echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"); include 'param_db.php'; $idr = isset($_POST['region'])?$_POST['region']:null; $idd = isset($_POST['departement'])?$_POST['departement']:null; ?> <!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> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" /> <title></title> </head> <body> <?php if(isset($_POST['valider']) && isset($_POST['region']) && isset($_POST['departement']) && $_POST['ville'] != "") { $region_selectionnee = $_POST['region']; $departement_selectionne = $_POST['departement']; $ville_selectionnee = $_POST['ville']; ?> <p>Vous avez sélectionné la ville n° <?php echo($ville_selectionnee); ?><br />le département n°<?php echo($departement_selectionne); ?><br />la région n°<?php echo($region_selectionnee); ?></p> <?php } $sql1 = "SELECT `idregion`, `nomregion`". " FROM `region`". " ORDER BY `nomregion`"; $rech_region = mysql_query($sql1); $code_region = array(); $region = array(); $nb_region = 0; if($rech_region != false) { while($ligne_reg = mysql_fetch_assoc($rech_region)) { array_push($code_region, $ligne_reg['idregion']); array_push($region, $ligne_reg['nomregion']); $nb_region++; } } ?> <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdep"> <fieldset style="border: 3px double #333399"> <select name="region" id="region" onchange="document.forms['chgdep'].submit();"> <option value="-1">- - - Choisissez une région - - -</option> <?php for($i = 0; $i < $nb_region; $i++) { ?> <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]." (". $code_region[$i] .")"); ?></option> <?php } ?> </select> <?php mysql_free_result($rech_region); if(isset($idr) && $idr != -1) { $sql2 = "SELECT `iddep`, `nomdep`". " FROM `departement`". " WHERE `refidregion` = ". $idr ."". " ORDER BY `nomdep`;"; $rech_dep = mysql_query($sql2, $link); $nd = 0; $code_dep = array(); $nom_dep = array(); while($ligne_dep = mysql_fetch_assoc($rech_dep)) { array_push($code_dep, $ligne_dep['iddep']); array_push($nom_dep, $ligne_dep['nomdep']); $nd++; } ?> <select name="departement" id="departement" onchange="document.forms['chgdep'].submit();"> <option value="-1">- - - Choisissez un département - - -</option> <?php for($j = 0; $j<$nd; $j++) { ?> <option value="<?php echo($code_dep[$j]); ?>"<?php echo((isset($departement_selectionne) && $departement_selectionne == $code_dep[$j])?" selected=\"selected\"":null); ?>><?php echo($nom_dep[$j]." (". $code_dep[$j] .")"); ?></option> <?php } ?> </select> <?php mysql_free_result($rech_dep); } if(isset($idd) && $idd != -1) { $sql3 = "SELECT `idville`, `nomville`". " FROM `ville`". " WHERE `refiddep` = ". $idd ."". " ORDER BY `nomville`;"; $rech_ville = mysql_query($sql3, $link); $nv = 0; $code_ville = array(); $nom_ville = array(); while($ligne_ville = mysql_fetch_assoc($rech_ville)) { array_push($code_ville, $ligne_ville['idville']); array_push($nom_ville, $ligne_ville['nomville']); $nv++; } ?> <select name="ville" id="ville" method="post"> <?php for($k = 0; $k<$nv; $k++) { ?> <option value="" selected="selected"> <option value="<?php echo($code_ville[$k]); ?>"<?php echo((isset($ville_selectionnee) && $ville_selectionnee == $code_ville[$k])?" selected=\"selected\"":null); ?>><?php echo($nom_ville[$k]." (". $code_ville[$k] .")"); ?></option> <?php } ?> </select> <?php mysql_free_result($rech_ville); } ?> <br /><input type="submit" name="valider" id="valider" value="Envoyer" /> </fieldset> </form> <?php mysql_close($link); ?> </body> </html>
Je sélectionne la région, les départements se chargent correctement.
Je sélectionne le département, les villes se chargent correctement mais la liste déroulante "departement" repointe sur "sélectionnez un département" et prend donc la valeur "-1".
Je sélectionne une ville et je valide : la liste déroulante "ville" disparaît (ce que je ne veux pas bien sûr !) et je récupère bien le n° de la région et celui de la ville mais "-1" pour le département.
J'éspère avoir été clair dans mon explication mais en tout cas merci d'avance pour votre aide !

Mammouth du PHP | 1353 Messages

01 juil. 2008, 09:53

Quelques erreurs qui expliquent certains de tes problèmes :

Quand tu construits ta liste département tu fais :
  <option value="<?php echo($code_dep[$j]); ?>"<?php echo((isset($departement_selectionne) && $departement_selectionne == $code_dep[$j])?" selected=\"selected\"":null); ?>><?php echo($nom_dep[$j]." (". $code_dep[$j] .")"); ?></option> 
Hors tu ne déclares $departement_selectionne que si tu as déjà tes trois variables, donc dans la plupart des cas il n'existe pas. $idd me parait plus adapté ici.

Ensuite je ne sais pas si c'est fait exprès, peut etre, mais dans les villes tu as seulement une ligne valide sur deux a cause de tes <option value=""/>... Et puis on ne met pas de paramètres method=post dans un select d'après moi :)

Voila, le premier point devrait résoudre certains problemes, je vais voir pour le reste si je trouve ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 3 Messages

02 juil. 2008, 12:04

En effet, $departement_selectionne est la variable permettant de récupérer le résultat et permettre l'affichage. Il est donc préferable d'utiliser $idd.
Et pour ce qui est de la balise <option value="">, ce n'était pas fait exprès. De +, pas de paramètres dans <select>. Ce sont des erreurs de ma part, je les ai supprimées.
Et, au final, je tiens à te remercier guilt92 car ces modifs ne résolvent pas certains de mes problèmes mais tous car, en effet, cela fonctionne maintenant.
Merci. :D

Mammouth du PHP | 1353 Messages

02 juil. 2008, 12:11

De rien ;)

Un petit clic sur Image
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 1 Messages

21 juil. 2008, 10:02

Bonjour, je suis désolé de faire remonter un post qui est déjà résolu mais malheureusement j'ai exactement le même problème que kentucky et je n'arrive pas à le régler
Pourrais tu STP mettre les fichiers qui fonctionnent
Merci d'avance beaucoup