Page 1 sur 1

liste deroulante liées PHP /sql

Posté : 21 juil. 2011, 14:14
par damien_55
Bonjour,

J'ai des liste déroulante liées a construire. J'ai récuperer le script ci dessous sui fonctionne bien mais seulement lorsqu'il y a deux listes. Je n'arrive pas a en integrer une troisieme en fonction de la deuxieme.

Voici le code:

Code : Tout sélectionner

<?php echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n"); /* Variables de connexion : ajustez ces paramètres selon votre propre environnement */ $serveur = ""; $admin = ""; $mdp = ""; $base = ""; /* On récupère si elle existe la valeur de la rubrique envoyée par le formulaire */ $idr = isset($_POST['rubrique'])?$_POST['rubrique']: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>Sélectionner une rubrique</title> </head> <body style="font-family: verdana, helvetica, sans-serif; font-size: 85%"> <?php if(isset($_POST['ok']) && isset($_POST['categorie']) && $_POST['categorie'] != "") { $rubrique_selectionnee = $_POST['rubrique']; $categorie_selectionne = $_POST['categorie']; ?> <p>Vous avez sélectionné la categorie <?php echo($categorie_selectionne); ?> dans la rubrique <?php echo($rubrique_selectionnee); ?></p> <?php } ?> <h3>Choisir une rubrique</h3> <?php /* On établit la connexion à MySQL avec mysql_pconnect() plutôt qu'avec mysql_connect() * car on aura besoin de la connexion un peu plus loin dans le script */ $connexion = mysql_pconnect($serveur, $admin, $mdp); if($connexion != false) { $choixbase = mysql_select_db($base, $connexion); $sql1 = "SELECT `id`, `name`". " FROM `rubrique_site`". " ORDER BY `name`"; $rech_rubriques = mysql_query($sql1); $code_rubrique = array(); $rubrique = array(); /* On active un compteur pour les régions */ $nb_rubriques = 0; if($rech_rubriques != false) { while($ligne = mysql_fetch_assoc($rech_rubriques)) { array_push($code_rubrique, $ligne['id']); array_push($rubrique, $ligne['name']); /* On incrémente de compteur */ $nb_rubriques++; } } ?> <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept"> <fieldset style="border: 3px double #333399"> <legend>Sélectionnez une catégorie</legend> <select name="rubrique" id="rubrique" onchange="document.forms['chgdept'].submit();"> <option value="-1">- - - Choisissez une rubrique - - -</option> <?php for($i = 0; $i < $nb_rubriques; $i++) { ?> <option value="<?php echo($code_rubrique[$i]); ?>"<?php echo((isset($idr) && $idr == $code_rubrique[$i])?" selected=\"selected\"":null); ?>><?php echo($rubrique[$i]); ?></option> <?php } ?> </select> <?php mysql_free_result($rech_rubriques); /* On commence par vérifier si on a envoyé un numéro de rubrique et le cas échéant s'il est différent de -1 */ if(isset($idr) && $idr != -1) { /* Cération de la requête pour avoir les categorie de cette région */ $sql2 = "SELECT `id`, `rubrique`, `categorie`". " FROM `news_categories`". " WHERE `rubrique` = ". $idr ."". " ORDER BY `categorie`;"; if($connexion != false) { $rech_categorie = mysql_query($sql2, $connexion); /* Un petit compteur pour les départements */ $nd = 0; /* On crée deux tableaux pour les numéros et les noms des départements */ $code_categorie = array(); $nom_categorie = array(); /* On va mettre les numéros et noms des départements dans les deux tableaux */ while($ligne_categorie = mysql_fetch_assoc($rech_categorie)) { array_push($code_categorie, $ligne_categorie['id']); array_push($nom_categorie, $ligne_categorie['categorie']); $nd++; } /* Maintenant on peut construire la liste déroulante */ ?> <select name="categorie" id="categorie"> <?php for($d = 0; $d<$nd; $d++) { ?> <option value="<?php echo($code_categorie[$d]); ?>"<?php echo((isset($categorie_selectionne) && $categorie_selectionne == $code_categorie[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_categorie[$d]." (". $code_categorie[$d] .")"); ?></option> <?php } ?> </select> <?php } /* Un petit coup de balai */ mysql_free_result($rech_categorie); } ?> <br /><input type="submit" name="ok" id="ok" value="Envoyer" /> </fieldset> </form> <?php /* Terminé, on ferme la connexion */ mysql_close($connexion); } else { /* Si on arrive là, c'est pas bon signe, il faut vérifier les * paramètres de connexion, mot de passe, serveur pas démarré etc... */ ?> <p>Un incident s'est produit lors de la connexion à la base de données, veuiillez essayer à nouveau ultérieurement.</p> <?php } ?> </body> </html>
Et je cherche a en integrer une troisieme en fonction des categories mais je n'arrive pas a récuperer la valeur de la categorie selectionnée comme $idr pour la premiere pour générer la troisieme liste. Mes requetes sont pretes il me mansque que ça. Merci de votre aide.

Re: liste deroulante liées PHP /sql

Posté : 21 juil. 2011, 15:37
par Ryle
Et quel est ton soucis précisément ? problème de conception ? message d'erreur ? résultat incohérent ?

Si tu es parvenu à le faire pour deux listes 1-2, il te suffit d'appliquer le même principe pour tes listes 2-3. Oublies que la deuxième liste est alimentée par la première et considère que la modification de la seconde affecte la 3 ème comme si tu n'avais que ces deux listes :)

Re: liste deroulante liées PHP /sql

Posté : 21 juil. 2011, 17:03
par damien_55
En fait je n'arrive pas a récuperer la valeur des categories choisis:

pour determiner la suite de mon script, qui est en fait: $idr_1 et l'inclure dans ce script:

Code : Tout sélectionner

<?php mysql_free_result($rech_categories); /* On commence par vérifier si on a envoyé un numéro de rubrique et le cas échéant s'il est différent de -1 */ if(isset($idr_1) && $idr_1 != -1) { /* Cération de la requête pour avoir les theme de cette région */ $sql22 = "SELECT `id`, `libelle`, `categorie_theme`". " FROM `news_theme`". " WHERE `categorie_theme` = ". $idr_1 ."". " ORDER BY `libelle`;"; if($connexion != false) { $rech_theme = mysql_query($sql22, $connexion); /* Un petit compteur pour les départements */ $nc = 0; /* On crée deux tableaux pour les numéros et les noms des départements */ $code_theme = array(); $nom_theme = array(); /* On va mettre les numéros et noms des départements dans les deux tableaux */ while($ligne_theme = mysql_fetch_assoc($rech_theme)) { array_push($code_theme, $ligne_theme['id']); array_push($nom_theme, $ligne_theme['libelle']); $nc++; } /* Maintenant on peut construire la liste déroulante */ ?> <select name="theme" id="theme"> <?php for($c = 0; $c<$nc; $c++) { ?> <option value="<?php echo($code_theme[$c]); ?>"<?php echo((isset($theme_selectionne) && $theme_selectionne == $code_theme[$c])?" selected=\"selected\"":null); ?>><?php echo($nom_theme[$c]." (". $code_theme[$c] .")"); ?></option> <?php } ?> </select> <?php } /* Un petit coup de balai */ mysql_free_result($rech_theme); } ?>
Je ne sais pas comment la recuperer là ??

Re: liste deroulante liées PHP /sql

Posté : 21 juil. 2011, 17:56
par Ryle
Pour tes listes 1 et 2, tu as modifié le select catégorie pour que lorsqu'une catégorie est sélectionnée, cela envoi automatiquement le formulaire. Tu récupères alors la valeur de la catégorie sélectionnée et tu l'utilises pour afficher les rubriques.

De la même manière, pour tes listes 2 et 3, il te faut modifier le select rubrique pour que lorsqu'une rubrique est sélectionnée, cela envoi automatiquement le formulaire. Tu pourras alors récupérer la valeur de la rubrique sélectionnée et l'utiliser pour afficher les thèmes associés :)

Re: liste deroulante liées PHP /sql

Posté : 21 juil. 2011, 18:29
par damien_55
Ok, j'ai modifié, ça envoie le formulaire. Mais ça ne me charge pas la 3eme liste. J'ai mis comme variable a recuperer Sidr_1 pour generer ma requete.
Je ne vois pas ou ça peche :(

Code : Tout sélectionner

<select name="categorie" id="categorie" onchange="document.forms['chgdept'].submit();"> < <?php for($d = 0; $d<$nd; $d++) { ?> <option value="<?php echo($code_categorie[$d]); ?>"<?php echo((isset($idr_1) && $idr_1 == $code_categorie[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_categorie[$d]." (". $code_categorie[$d] .")"); ?></option> <?php } ?> </select> <?php } /* Un petit coup de balai */ mysql_free_result($rech_categorie); } if(isset($idr_1) && $idr_1 != -1) { /* Création de la requête pour avoir les themes */ $sql22 = "SELECT `id`, `libelle`, `categorie_theme`". " FROM `news_theme`". " WHERE `categorie_theme` = ". $idr_1 ."". " ORDER BY `libelle`;"; if($connexion != false) { $rech_theme = mysql_query($sql22, $connexion); /* Un petit compteur pour les départements */ $nc = 0; /* On crée deux tableaux pour les numéros et les noms des départements */ $code_theme = array(); $nom_theme = array(); /* On va mettre les numéros et noms des départements dans les deux tableaux */ while($ligne_theme = mysql_fetch_assoc($rech_theme)) { array_push($code_theme, $ligne_theme['id']); array_push($nom_theme, $ligne_theme['libelle']); $nc++; } ?> <select name="theme" id="theme"> <?php for($c = 0; $c<$nc; $c++) { ?> <option value="<?php echo($code_theme[$c]); ?>"<?php echo((isset($theme_selectionne) && $theme_selectionne == $code_theme[$c])?" selected=\"selected\"":null); ?>><?php echo($nom_theme[$c]." (". $code_theme[$c] .")"); ?></option> <?php } ?> </select>

Re: liste deroulante liées PHP /sql

Posté : 21 juil. 2011, 21:00
par damien_55
En fait, j'ai deux problemes, le deuxieme liste s'affiche bien sauf que lorsque je selectionne, elle ne garde pas la valeur retenue et la troisieme liste (en focntion de la deuxieme) ne s'affiche pas... :(

Re: liste deroulante liées PHP /sql

Posté : 22 juil. 2011, 19:05
par damien_55
Résolu :)