tete278 | Bonjour à tous,
J'ai récupéré sur le net un script qui permet d'utiliser des listes déroulantes dépendantes. J'essaie de l'adapter afin que dans la liste 2 apparaissent toutes les occurences du choix effectué dans la première liste mais pour l'instant n'apparaît dans cette seconde liste qu'un seul enregistrement
J'utilise à cette fin 2 fichiers nommés _adet.php et _adetsuite.php dont voici les contenus en commençant par le premier _adet.php
Code :
- <?php
- include("_adetsuite.php" );
- ?>
- <HTML>
- <HEAD>
- <META NAME="Author" LANG="fr" CONTENT="Denis Blomme">
- <script language="javascript">
- <!-- Début
- if (window.screen)
- {
- if (screen.width<800) css="../feuille640.css";
- else if (screen.width<1024) css="../feuille800.css";
- else css="../feuille1024.css";}
- document.writeln('<link rel="stylesheet" href="'+css+'" type="text/css">');
- // End -->
- </script>
- <SCRIPT language="JavaScript">
- var nblist=<?php echo $nblist;?>; // Nombre de listes dépendantes
- // Mise à jour des listes via XMLHttpRequest
- function liste(f,q) {
- document.frm.id_select.value="";
- chp=""; // concatener les options
- for(i=0;i<q;i++){
- sel=f.elements["list"+i];
- ind=sel.selectedIndex;
- chp=chp+sel.options[ind].value+"/";
- }
- var l1 = f.elements["list"+(q-1)]; // La liste père
- var l2 = f.elements["list"+q]; // La liste à mettre à jour
- var index = l1.selectedIndex; // Index de la liste
- // Remise à zéro des listes suivantes
- for(i=q;i<=nblist;i++) f.elements["list"+i].options.length = 0;
- // Si une option est sélectionnée, alors, il faut y aller ;)
- if(index > 0) {
- var xhr_object = null;
- if(window.XMLHttpRequest) // Si Firefox
- xhr_object = new XMLHttpRequest();
- else if(window.ActiveXObject) // Si Internet Explorer
- xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
- else { // XMLHttpRequest non supporté par le navigateur
- alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
- return;
- }
- // On passe en GET le numéro du select à mettre à jour
- xhr_object.open("POST", "_adetsuite.php?q="+q, true);
- xhr_object.onreadystatechange = function() {
- if(xhr_object.readyState == 4)
- eval(xhr_object.responseText);
- }
- xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
- // Les données sont préparées dans data avec :
- // - champ : contient la value de l'option sélectionnée
- // - form : contient le nom du formulaire
- // - select : contient le nom du select (les appeler tous listX où x va de 0 à n)
- var data = "champ="+chp+"&form="+f.name+"&select=list"+q;
- xhr_object.send(data);
- }
- }
- </SCRIPT>
- <STYLE TYPE="text/css">
- td,select,input { font:normal 8pt Verdana }
- </STYLE>
- </HEAD><BODY>
- <table><tr><td><fieldset>
- <legend>Sélectionnez </legend>
- <table><form name="frm" id="frm" method="POST">
- <tr>
- <td align="right">Famille :</td>
- <td><select style="width:200px" name="list0" id="list0" onchange="liste(this.form,1)">
- <option value="">== Choisir ==</option>
- <?php echo $liste_dpt;?>
- <option value="*">== Tout ==</option>
- </select></td>
- </tr><tr>
- <td align="right">Genre :</td>
- <td><select style="width:200px" name="list1" id="list1" onchange="liste(this.form,2)">
- </select></td>
- </tr><tr>
- <td align="right">French :</td>
- <td><select style="width:200px" name="list2" id="list2" onchange="liste(this.form,3)">
- </select></td>
- </tr><tr>
- <td align="right">Adresse :</td>
- <td><select style="width:200px" name="list3" id="list3" onChange="document.frm.id_select.value=this.value;">
- </select></td>
- </tr><tr>
- <td align="right">Identifiant :</td>
- <td align="left"><input type="text" name="id_select" size="5" readonly="readonly"/>
- <input type="submit" value="Envoyer"/></td>
- </tr>
- </form></table>
- </fieldset></td></tr></table>
- </BODY></HTML>
|
Maintenant _adetsuite.php :
Code :
- <?php
- $nblist=3; // Nombre de listes dépendantes
- // Inclusion du fichier de connexion à la base de données
- include "mysql_conf.inc.php";
- $link=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );
- $base = mysql_select_db("plant" );
- $q=@$_GET["q"]; // "q" est le numéro du select à mettre à jour
- $f=@$_POST["form"]; // Le nom du formulaire
- $s=@$_POST["select"]; // Le nom du select
- $ids=@$_POST["champ"]; // L'identifiant a rechercher
- $id=explode("/",$ids."////" );
- //$chp=array("id_pays","id_region","id_dept" ); // Les noms des champs
- $chp=array("idPlant","idPlant","idPlant" ); // Les noms des champs
- //$chp=array("family","genre","french" ); // Les noms des champs
- // Creer le WHERE avec les identifiants
- $w=" WHERE 1=1";
- for($i=0;$i<sizeof($id);$i++){
- if(($id[$i]!="" )&&($id[$i]!="*" )){
- $w=$w." AND ".$chp[$i]."=".$id[$i];
- }
- }
- switch($q) {
- // Il faut, pour toutes les requêtes, prendre dans l'ordre les champs identifiant, libellé où identifiant est numérique auto-incrémenté
- case "1": // Liste des genres
- $query = "SELECT idPlant,genre FROM plant".$w." ORDER BY genre";
- case "2": // Liste des noms français
- if(!@$query) $query = "SELECT idPlant,french FROM plant".$w." ORDER BY french";
- case "3": // Liste des adresses
- if(!@$query) $query = "SELECT idPlant,adresse FROM plant".$w." ORDER BY adresse";
- // On pourrait ajouter "à l'infini" d'autres tests ;)
- // On écrit du code JavaScript qui sera évalué et donc traité au retour
- echo 'var o = null;'; // Création de l'objet "s" : la liste du formulaire à mettre à jour
- echo 'var s = document.forms["'.$f.'"].elements["'.$s.'"];'; // On la vide en mettant sa taille à zéro
- echo 's.options.length = 0;'; // On ajoute une première option à cette liste
- echo 's.options[s.options.length] = new Option("== Choisir ==","" );'; // On ajoute les options trouvées dans le recordset
- $result = @mysql_query($query);
- while($r = mysql_fetch_array($result))
- echo 's.options[s.options.length] = new Option("'.utf8_encode($r[1]).'","'.utf8_encode($r[0]).'" );';
- // Dernière option du select si pas le dernier
- if($q<$nblist){echo 's.options[s.options.length] = new Option("== Tout ==","*" );';}
- break;
- // Si q n'est ni 1, ni 2, ni 3, il faut préparer le 0 ;)
- default: // Liste des familles
- $liste_dpt = "";
- $SQL = "SELECT idPlant,family FROM plant ORDER BY family";
- $res = mysql_query($SQL);
- while($val = mysql_fetch_array($res))
- $liste_dpt .= "<option value=\"".$val[0]."\">".$val[1]."</option>\n";
- }
- @mysql_close();
- ?>
|
Comment puis-je faire apparaître dans cette seconde liste, non pas seulement 1, mais toutes les occurences correspondant à mon premier choix ?
D'avance, merci
tete278 |