listes deroulantes liées

Petit nouveau ! | 7 Messages

15 août 2008, 08:40

Bonjour,
je ne suis pas tres bon en php et ma question vous paraitra peut-etre un peu bête...
voila, j'ai utilisé le code php de "Listes déroulantes liées" posté dans la rubrique FAQ et tutoriels.
j'ai mis le code dans un fichier liste_deroulante.php et je l'appelle dans ma page
ça fonctionne tres bien pour afficher les departements de la region
mon probleme: je dois en cliquant sur Envoyer afficher des annonces de ce departement. le code n'est pas prevu pour ça, il manque un petit quelque chose et la je bloque, est-ce que quelqu'un pourrait m'aider svp ?

Code : Tout sélectionner

require('gestion/qs_connection.php'); $base = "regions"; $idr = isset($_POST['region'])?$_POST['region']:null; if(isset($_POST['ok']) && isset($_POST['departement']) && $_POST['departement'] != "") { $region_selectionnee = $_POST['region']; $dept_selectionne = $_POST['departement']; $_SESSION['depart']=$depart; } ?> <table cellpadding="0" cellspacing="0"> <tr> <td width="457" colspan="3" ><p align="left"> <?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($host,$user,$passwd); if($connexion != false) { $choixbase = mysql_select_db($base,$connexion); $sql1 = "SELECT `idregion`, `libregion`". " FROM `regions`". " ORDER BY `idregion`"; $rech_regions = mysql_query($sql1); $code_region = array(); $region = array(); /* On active un compteur pour les régions */ $nb_regions = 0; if($rech_regions != false) { while($ligne = mysql_fetch_assoc($rech_regions)) { array_push($code_region, $ligne['idregion']); array_push($region, $ligne['libregion']); /* On incrémente de compteur */ $nb_regions++; } } ?> <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept"> <fieldset style="margin-left:6; margin-right:6; margin-bottom:6; margin-top:6; border:1pxb solid #CCCCCC"> <legend >&nbsp;Votre sélection</legend>&nbsp;<?php RemplirTypeCommerce("typeann"); ?><br /><br /> &nbsp;<select name="region" id="region" onchange="document.forms['chgdept'].submit();"> <option value="-1">- - - Choisissez une région - - -</option> <?php for($i = 0; $i < $nb_regions; $i++) { ?> <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region[$i]); ?></option> <?php } ?> </select> <?php mysql_free_result($rech_regions); /* On commence par vérifier si on a envoyé un numéro de région et le cas échéant s'il est différent de -1 */ $departement=0; if(isset($idr) && $idr != -1) { /* Cération de la requête pour avoir les départements de cette région */ $sql2 = "SELECT `iddepart`, `libdepart`". " FROM `departements`". " WHERE `id_region` = ". $idr ." ". " ORDER BY `iddepart`"; if($connexion != false) { $rech_dept = 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_dept = array(); $nom_dept = array(); /* On va mettre les numéros et noms des départements dans les deux tableaux */ while($ligne_dept = mysql_fetch_assoc($rech_dept)) { array_push($code_dept, $ligne_dept['iddepart']); array_push($nom_dept, $ligne_dept['libdepart']); $nd++; } /* Maintenant on peut construire la liste déroulante */ ?> <select name="departement" id="departement"> <?php for($d = 0; $d<$nd; $d++) { ?> <option value="<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?>><?php echo($nom_dept[$d]." (". $code_dept[$d] .")"); ?></option> <?php } ?> </select> <?php } /* Un petit coup de balai */ mysql_free_result($rech_dept); } ?> <br /><br />&nbsp;<input type="submit" name="ok" id="ok" value="Modifier" /> <br /><br /> </fieldset> </form> <?php /* Je ne peux pas fermer la connexion car j'en ai besoin dans la suite de la page */ } 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 } ?> </p></tr> </table>
[/php][/code]

Mammouth du PHP | 19672 Messages

15 août 2008, 11:26

Il semble qu'il manque une clause dans ta requête, clause précisant le département. Or tu récupères bien ce département en début de code pourtant. Il te reste à ajouter ladite clause.

Commence par exemple par définir une requête en dur pour tester la récupération des annonces d'un département donné : quand ça fonctionnera, il te restera à l'intégrer en remplaçant les valeurs en dur par des variables, variables dont tu définis la valeur au début.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 7 Messages

15 août 2008, 19:11

merci, j'ai modifié quelques trucs dans la base de donnée.
j'y suis presque, les annonces s'affichent par departements
les problemes qui restent avec ce nouveau code:
avec onChange (pour les departements) je ne passe plus par Envoyer et lorsque la page se reaffiche j'ai bien mes annonces par departement mais j'ai perdu la region...

Code : Tout sélectionner

<?php require('gestion/qs_connection.php'); $base = "regions"; if (isset($_REQUEST["region"])) { $region= $_REQUEST["region"] ; $_SESSION['region']=$region; } else if (isset($_SESSION['region'])) $region=$_SESSION['region']; else $region= 0; if (isset($_REQUEST["depart"])) { $depart= $_REQUEST["depart"] ; $_SESSION['depart']=$depart; } else if (isset($_SESSION['depart'])) $depart=$_SESSION['depart']; else $depart= 0; $idr = isset($_POST['region'])?$_POST['region']:null; if(isset($_POST['ok']) && isset($_POST['departement']) && $_POST['departement'] != "") { $region_selectionnee = $_POST['region']; $dept_selectionne = $_POST['departement']; } ?> <table cellpadding="0" cellspacing="0"> <tr> <td width="457" colspan="3" ><p align="left"> <?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($host,$user,$passwd); if($connexion != false) { $choixbase = mysql_select_db($base,$connexion); $sql1 = "SELECT `idregion`, `libregion`". " FROM `regions`". " ORDER BY `idregion`"; $rech_regions = mysql_query($sql1); $code_region = array(); $region2 = array(); /* On active un compteur pour les régions */ $nb_regions = 0; if($rech_regions != false) { while($ligne = mysql_fetch_assoc($rech_regions)) { array_push($code_region, $ligne['idregion']); array_push($region2, $ligne['libregion']); /* On incrémente de compteur */ $nb_regions++; } } ?> <form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept"> <fieldset style="margin-left:6; margin-right:6; margin-bottom:6; margin-top:6; border:1pxb solid #CCCCCC"> <legend >&nbsp;Votre sélection</legend>&nbsp;<?php RemplirTypeCommerce("typeann"); ?><br /><br /> &nbsp;<select name="region" id="region" onchange="document.forms['chgdept'].submit();"> <option value="-1">- - - Choisissez une région - - -</option> <?php for($i = 0; $i < $nb_regions; $i++) { ?> <option value="<?php echo($code_region[$i]); ?>"<?php echo((isset($idr) && $idr == $code_region[$i])?" selected=\"selected\"":null); ?>><?php echo($region2[$i]); ?></option> <?php } ?> </select> <?php mysql_free_result($rech_regions); /* On commence par vérifier si on a envoyé un numéro de région 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 départements de cette région */ $sql2 = "SELECT `iddepart`, `libdepart`". " FROM `departements`". " WHERE `id_region` = ". $idr ." ". " ORDER BY `iddepart`"; if($connexion != false) { $rech_dept = 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_dept = array(); $nom_dept = array(); /* On va mettre les numéros et noms des départements dans les deux tableaux */ while($ligne_dept = mysql_fetch_assoc($rech_dept)) { array_push($code_dept, $ligne_dept['iddepart']); array_push($nom_dept, $ligne_dept['libdepart']); $nd++; } /* Maintenant on peut construire la liste déroulante */ ?> <select name="departement" id="departement" onChange="namosw_goto_byselect(this, 'self')"> <?php for($d = 0; $d<$nd; $d++) { ?> <option value="liste_annonces222.php?depart=<?php echo($code_dept[$d]); ?>"<?php echo((isset($dept_selectionne) && $dept_selectionne == $code_dept[$d])?" selected=\"selected\"":null); ?> ><?php echo($nom_dept[$d]); ?></option> <?php } ?> </select> <?php } /* Un petit coup de balai */ mysql_free_result($rech_dept); } ?> <br /><br />&nbsp;<input type="submit" name="ok" id="ok" value="Modifier" /> <br /><br /> </fieldset> </form> <?php /* Je ne peux pas fermer la connexion car j'en ai besoin dans la suite de la page */ } 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 } ?> </p></tr> </table>

Mammouth du PHP | 19672 Messages

16 août 2008, 00:35

J'ai tout lieu de penser que tu travailles à l'envers.
-1- Commence par définir les requêtes SQL pour obtenir les données souhaitées;
-2- Définis à partir de ces requêtes quels sont les paramètres variables;
-3- Détermine comment récupérer les valeurs appropriées pour initialiser ces variables.

Là tu pourras avancer au lieu de tâtonner en essayant un truc ou l'autre un peu au hasard :-k

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Petit nouveau ! | 7 Messages

16 août 2008, 10:10

c'est vrai je tatonne et teste un peu au hasard, mais bon...

tout est bon dans les requetes SQL,
j'ai remplacé
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" id="chgdept">
par
<form action="liste_annonces.php?depart=<?php echo $depart; ?>" method="post" id="chgdept">
j'ai enlevé le onChange du select
pour le moment j'ai:
liste_annonces.php?depart=0
il ne me reste plus qu'à dire que $depart = $code_dept[$d]
je ne sais ni ou ni comment ??