listes deroulantes liées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : listes deroulantes liées

par thierry222 » 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 ??

par Cyrano » 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]

par thierry222 » 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>

par Cyrano » 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.

listes deroulantes liées

par thierry222 » 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]