Listes dépendantes

Listes dépendantes - PHP - Programmation

Marsh Posté le 24-03-2009 à 13:38:01    

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 :
  1. <?php
  2. include("_adetsuite.php" );
  3. ?>
  4. <HTML>
  5. <HEAD>
  6. <META NAME="Author" LANG="fr" CONTENT="Denis Blomme">
  7. <script language="javascript">
  8. <!-- Début
  9. if (window.screen)
  10. {
  11. if (screen.width<800) css="../feuille640.css";
  12. else if (screen.width<1024) css="../feuille800.css";
  13. else css="../feuille1024.css";}
  14. document.writeln('<link rel="stylesheet" href="'+css+'" type="text/css">');
  15. // End -->  
  16. </script>
  17. <SCRIPT language="JavaScript">
  18. var nblist=<?php echo $nblist;?>; // Nombre de listes dépendantes  
  19. // Mise à jour des listes via XMLHttpRequest  
  20. function liste(f,q) {
  21.    document.frm.id_select.value="";
  22.    chp=""; // concatener les options  
  23.    for(i=0;i<q;i++){
  24.       sel=f.elements["list"+i];
  25.       ind=sel.selectedIndex;
  26.       chp=chp+sel.options[ind].value+"/";
  27.    }
  28.    var l1 = f.elements["list"+(q-1)]; // La liste père  
  29.    var l2 = f.elements["list"+q]; // La liste à mettre à jour  
  30.    var index = l1.selectedIndex; // Index de la liste  
  31. // Remise à zéro des listes suivantes  
  32.    for(i=q;i<=nblist;i++) f.elements["list"+i].options.length = 0;
  33. // Si une option est sélectionnée, alors, il faut y aller ;)  
  34.    if(index > 0) {
  35.    var xhr_object = null;
  36.    if(window.XMLHttpRequest) // Si Firefox  
  37.       xhr_object = new XMLHttpRequest();
  38.    else if(window.ActiveXObject) // Si Internet Explorer  
  39.       xhr_object = new ActiveXObject("Microsoft.XMLHTTP" );
  40.    else { // XMLHttpRequest non supporté par le navigateur  
  41.       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..." );
  42.       return;
  43.    }
  44. // On passe en GET le numéro du select à mettre à jour  
  45.    xhr_object.open("POST", "_adetsuite.php?q="+q, true);
  46.    xhr_object.onreadystatechange = function() {
  47.    if(xhr_object.readyState == 4)
  48.       eval(xhr_object.responseText);
  49.    }
  50.    xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded" );
  51. // Les données sont préparées dans data avec :  
  52. // - champ  : contient la value de l'option sélectionnée  
  53. // - form   : contient le nom du formulaire  
  54. // - select : contient le nom du select (les appeler tous listX où x va de 0 à n)  
  55.    var data = "champ="+chp+"&form="+f.name+"&select=list"+q;
  56.    xhr_object.send(data);
  57.    }
  58. }
  59. </SCRIPT>
  60. <STYLE TYPE="text/css">
  61.    td,select,input { font:normal 8pt Verdana }
  62. </STYLE>
  63. </HEAD><BODY>
  64. <table><tr><td><fieldset>
  65. <legend>Sélectionnez&nbsp;</legend>
  66. <table><form name="frm" id="frm" method="POST">
  67. <tr>
  68.    <td align="right">Famille&nbsp;:</td>
  69.    <td><select style="width:200px" name="list0" id="list0" onchange="liste(this.form,1)">
  70.    <option value="">== Choisir ==</option>
  71.    <?php echo $liste_dpt;?>
  72.    <option value="*">== Tout ==</option>
  73.    </select></td>
  74. </tr><tr>
  75.    <td align="right">Genre&nbsp;:</td>
  76.    <td><select style="width:200px" name="list1" id="list1" onchange="liste(this.form,2)">
  77.    </select></td>
  78. </tr><tr>
  79.    <td align="right">French&nbsp;:</td>
  80.    <td><select style="width:200px" name="list2" id="list2" onchange="liste(this.form,3)">
  81.    </select></td>
  82. </tr><tr>
  83.    <td align="right">Adresse&nbsp;:</td>
  84.    <td><select style="width:200px" name="list3" id="list3" onChange="document.frm.id_select.value=this.value;">
  85.    </select></td>
  86. </tr><tr>
  87.    <td align="right">Identifiant&nbsp;:</td>
  88.    <td align="left"><input type="text" name="id_select" size="5" readonly="readonly"/>
  89.       &nbsp;&nbsp;&nbsp;<input type="submit" value="Envoyer"/></td>
  90. </tr>
  91. </form></table>
  92. </fieldset></td></tr></table>
  93. </BODY></HTML>


 
Maintenant _adetsuite.php :

Code :
  1. <?php
  2. $nblist=3; // Nombre de listes dépendantes  
  3. // Inclusion du fichier de connexion à la base de données  
  4. include "mysql_conf.inc.php";
  5. $link=mysql_connect($host,$login,$password) or die ('Erreur :'.mysql_error() );
  6. $base = mysql_select_db("plant" );
  7. $q=@$_GET["q"]; // "q" est le numéro du select à mettre à jour  
  8. $f=@$_POST["form"]; // Le nom du formulaire  
  9. $s=@$_POST["select"]; // Le nom du select  
  10. $ids=@$_POST["champ"]; // L'identifiant a rechercher  
  11. $id=explode("/",$ids."////" );  
  12. //$chp=array("id_pays","id_region","id_dept" ); // Les noms des champs  
  13. $chp=array("idPlant","idPlant","idPlant" ); // Les noms des champs  
  14. //$chp=array("family","genre","french" ); // Les noms des champs  
  15. // Creer le WHERE avec les identifiants  
  16. $w=" WHERE 1=1";
  17. for($i=0;$i<sizeof($id);$i++){
  18.    if(($id[$i]!="" )&&($id[$i]!="*" )){
  19.       $w=$w." AND ".$chp[$i]."=".$id[$i];
  20.    }
  21. }
  22. switch($q) {
  23. // Il faut, pour toutes les requêtes, prendre dans l'ordre les champs identifiant, libellé où identifiant est numérique auto-incrémenté  
  24.    case "1": // Liste des genres  
  25.       $query = "SELECT idPlant,genre FROM plant".$w." ORDER BY genre";
  26.    case "2": // Liste des noms français
  27.       if(!@$query) $query = "SELECT idPlant,french FROM plant".$w." ORDER BY french";
  28.    case "3": // Liste des adresses  
  29.       if(!@$query) $query = "SELECT idPlant,adresse FROM plant".$w." ORDER BY adresse";
  30. // On pourrait ajouter "à l'infini" d'autres tests ;)  
  31. // On écrit du code JavaScript qui sera évalué et donc traité au retour  
  32.    echo 'var o = null;'; // Création de l'objet "s" : la liste du formulaire à mettre à jour  
  33.    echo 'var s = document.forms["'.$f.'"].elements["'.$s.'"];';  // On la vide en mettant sa taille à zéro  
  34.    echo 's.options.length = 0;'; // On ajoute une première option à cette liste  
  35.    echo 's.options[s.options.length] = new Option("== Choisir ==","" );'; // On ajoute les options trouvées dans le recordset  
  36.    $result = @mysql_query($query);
  37.    while($r = mysql_fetch_array($result))
  38.       echo 's.options[s.options.length] = new Option("'.utf8_encode($r[1]).'","'.utf8_encode($r[0]).'" );';
  39.    // Dernière option du select si pas le dernier  
  40.    if($q<$nblist){echo 's.options[s.options.length] = new Option("== Tout ==","*" );';}
  41.    break;
  42. //  Si q n'est ni 1, ni 2, ni 3, il faut préparer le 0 ;)  
  43.    default: // Liste des familles  
  44.    $liste_dpt = "";
  45.    $SQL = "SELECT idPlant,family FROM plant ORDER BY family";
  46.    $res = mysql_query($SQL);
  47.    while($val = mysql_fetch_array($res))
  48.    $liste_dpt .= "<option value=\"".$val[0]."\">".$val[1]."</option>\n";
  49.    }
  50. @mysql_close();
  51. ?>


 
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

Reply

Marsh Posté le 24-03-2009 à 13:38:01   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed