Passage de valeurs entre listes déroulantes

Fermé
nionio_bot - Modifié par nionio_bot le 25/10/2012 à 09:22
DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 - 31 oct. 2012 à 09:17
Bonjour,
Ma question risque de paraitre simple à beaucoup d'entre vous, mais tant pis je me lance.

je vais poster mon code, et poser ma question ensuite:
<html> 
 <head> 
  <link href='../css/style.css' rel="stylesheet" media="all" type="text/css"> 
  <title>Contenu de la table INVENTAIRE</title> 

  <script language="javascript"> 
   
  // dddd 
  function CreerVariableGlobale( NomVar, valeur ){ 
   window[NomVar] = valeur; 
  } 

  function DateOK_afficherBU(la_valeur) { 
   
   var type = document.getElementById("dates").value; 
    
   document.forms["valeurs_selectionnees"].elements["date_inventaire"].value=type; 
    
   switch (type) { 
    //case "all_date" : 
    default : 
     document.getElementById("les_bus").style.display="inline"; 
     break; 
    case "entete" : 
     document.getElementById("les_bus").style.display="none"; 
     document.getElementById("les_serveurs").style.display="none"; 
     document.getElementById("les_sgbds").style.display="none"; 
   } 
  } 

  // ddd 
  function BuOK_afficherServeur() { 
   var type = document.getElementById("bus").value; 

   document.forms["valeurs_selectionnees"].elements["bu_id"].value=type;    

   switch (type) { 
    // case "all_bu" : 
    default : 
     document.getElementById("les_serveurs").style.display="inline"; 
     break; 
    case "entete" : 
     document.getElementById("les_serveurs").style.display="none"; 
     document.getElementById("les_sgbds").style.display="none"; 
   } 
  } 

  // ddd 
  function ServeurOK_afficherSgbd() { 
   var type = document.getElementById("serveurs").value; 

   document.forms["valeurs_selectionnees"].elements["serveur_id"].value=type;    
    
   switch (type) { 
    //case "all_serveur" : 
    default : 
     document.getElementById("les_sgbds").style.display="inline"; 
     break; 
    case "entete" : 
     document.getElementById("les_sgbds").style.display="none"; 
   } 
  } 
   
  function cumul1 () { 
   var rep_fct1=DateOK_afficherBU(); //on lance la fonction1 
  } 
  </script> 

 </head> 

 <body> 
  <h1><center>Contenu de la table INVENTAIRE.</h1> <br /> 

  <form name="valeurs_selectionnees" id="valeurs_selectionnee"> 
   <input type=text name="date_inventaire" value="" > 
   <input type=text name="bu_id" value="" > 
   <input type=text name="serveur_id" value="" > 
  </form> 
  <?php 
  define('__ROOT__', dirname(dirname(__FILE__))); 
  require_once (__ROOT__.'/include/db_info.inc.php');    
   
  // Appel de la fonction my_conect qui se charge de la connexion à la base Postgres 
  $link = my_connect(); 
  if ( $link <> -1 ) { 
   //echo "La connection à la ".$dbname." est réussie. \n"; 
   $a=1; 
  } else { 
   echo "La connection à la ".$dbname." est impossible.\n"; 
   die();     
  }  



  ?> 
  <form action="<?php echo ($_SERVER['PHP_SELF']);?>" method="post" id="les_dates"> 
  Quelle date d'inventaire? 
  <select name="les_dates" id="dates" onchange="cumul1()" method="post" > 
  <option value="entete">Choisissez Date</option> 
   <?php 
    // Récupération des informations triées par ordre de date 
    $my_query_date  = 'SELECT distinct date_inventaire';  
    $my_query_date .= ' FROM "Inventory".INVENTAIRE';  
    $my_query_date .= ' ORDER BY date_inventaire' ; 

    $ReqDates = pg_exec($link,$my_query_date);  
    $num_dates = pg_numrows($ReqDates); 
    
    echo '<option value="all_dates">Toutes Dates</option>'; 
     
    for($ri = 0; $ri < $num_dates; $ri++) { 
     $row = pg_fetch_array($ReqDates, $ri); 
     echo '<option value="'.$row['date_inventaire'].'"' ; 
     if(isset($_POST['LISTE_DATES']) AND $_POST['LISTE_DATES'] == $row['date_inventaire']) 
      echo ' selected >'; 
     else 
      echo ' > ';   
     echo $row['date_inventaire'].' </option>'; 
    } 
      
    pg_free_result($ReqDates); 
      
   ?> 
  </select> 
   
  <div id ="les_bus" style="display:none" > 
  BU: 
   <select name="les_bus" id="bus" onchange="BuOK_afficherServeur();" > 
   <option value="entete">Choisir la BU</option> 
   <?php 
     // Récupération des informations triées par ordre de bu_id  
     $sql_bus  = 'SELECT distinct b.bu_id, bu_desc '; 
     $sql_bus .= ' FROM "Inventory".BUS B, "Inventory".INVENTAIRE I, "Inventory".SERVEURS S ';  
     $sql_bus .= ' WHERE b.bu_id =  s.bu_id';  
     $sql_bus .= '   AND I.serveur_id =  s.serveur_id';  
     // Ajout du critère sur date s'il est différent de all_dates 
     if (isset($_POST['LISTE_DATES']))  
      if ($_POST['LISTE_DATES'] != "all_dates") 
       $sql_bus .= "   AND I.date_inventaire = '".$_POST['LISTE_DATES']."'";  
     $sql_bus .= ' ORDER BY bu_desc';  

     $ReqBus = pg_exec($link,$sql_bus);  
     $num_bus = pg_numrows($ReqBus); 
    
     echo '<option value="all_bus">Toutes BUS</option>'."\n";  
             if ($num_bus > 0) { 
      for($ri = 0; $ri < $num_bus; $ri++) { 
       $row = pg_fetch_array($ReqBus, $ri); 
       echo '<option value="'.$row['bu_id'].'" ' ; 
       if(isset($_POST['LISTE_BUS']) AND $_POST['LISTE_BUS'] == $row['bu_id']) 
        echo ' selected >'; 
       else 
        echo ' > ';   
       echo $row['bu_desc'].' </option>'; 
      } 
     } 
      
     pg_free_result($ReqBus); 
     
   ?> 
   </select> 
  </div> 
   
  <div id ="les_serveurs" style="display:none" > 
   <select name="les_serveurs" id="serveurs" onchange="ServeurOK_afficherSgbd();" method="post"> 
   <option value="entete">Choisissez le serveur</option> 
   <?php 
     $sql_Ss  = 'SELECT distinct s.serveur_id, serveur_fqdn '; 
     $sql_Ss .= ' FROM "Inventory".INVENTAIRE I, "Inventory".SERVEURS S, "Inventory".BUS B '; 
     $sql_Ss .= ' WHERE I.serveur_id =  s.serveur_id ';  

     // Ajout du critère sur date s'il est différent de all_dates 
     if (isset($_POST['LISTE_DATES']))  
      if ($_POST['LISTE_DATES'] != "all_dates") 
       $sql_Ss .= "   AND I.date_inventaire = '".$_POST['LISTE_DATES']."'";  

     // Ajout du critère sur la bu si elle est différente de all_bus 
     if (isset($_POST['LISTE_BUS']))  
      if ($_POST['LISTE_BUS'] != "all_bus") 
       $sql_Ss .= "   AND b.bu_id = '".$_POST['LISTE_BUS']."' ";  

     $sql_Ss .= 'ORDER BY serveur_fqdn';  
     $ReqSs = pg_exec($link,$sql_Ss);  
     $num_Ss = pg_numrows($ReqSs); 
  
     echo '<option value="all_serveurs">Tous Serveurs.</option>';  
   
     for($ri = 0; $ri < $num_Ss; $ri++) { 
      $row = pg_fetch_array($ReqSs, $ri); 
      print('<option value="'.$row['serveur_id'].'">'.$row['serveur_fqdn'].'</option>'); 
      echo '<option value="'.$row['serveur_id'].'" ' ; 
      if(isset($_POST['LISTE_SERVEURS']) AND $_POST['LISTE_SERVEURS'] == $row['serveur_id']) 
       echo ' selected >'; 
      else 
       echo ' > ';   
      echo $row['serveur_fqdn'].' </option>'; 
     } 
      
     pg_free_result($ReqSs); 
  
   ?> 
   </select> 
  </div>  

  <div id ="les_sgbds" style="display:none" > 
   <select name="les_sgbds" id="sgbds" onchange="document.forms['les_sgbds'].submit();" > 
   <option value="entete">Choisissez le sgbd</option> 
   <?php 
    // Récupération des informations triées par ordre de sgbd_id  
     $sql_Ss  = 'SELECT distinct s.serveur_id, serveur_fqdn '; 
     $sql_Ss .= ' FROM "Inventory".INVENTAIRE I, "Inventory".SERVEURS S, "Inventory".BUS B '; 
     $sql_Ss .= ' WHERE I.serveur_id =  s.serveur_id ';  

     // Ajout du critère sur date s'il est différent de all_dates 
     if (isset($_POST['LISTE_DATES']))  
      if ($_POST['LISTE_DATES'] != "all_dates") 
       $sql_Ss .= "   AND I.date_inventaire = '".$_POST['LISTE_DATES']."'";  

     // Ajout du critère sur bus si elle est différente de all_bus 
     if (isset($_POST['LISTE_BUS']))  
      if ($_POST['LISTE_BUS'] != "all_bus") 
       $sql_Ss .= "   AND b.bu_id = '".$_POST['LISTE_BUS']."' ";  

    $sql_sgbds = 'SELECT sgbd_id, sgbd_desc,sgbd_version FROM "Inventory".SGBDS order by sgbd_id';  
    $ReqSGBDs = pg_exec($link,$sql_sgbds);  
    $num_sgbds = pg_numrows($ReqSGBDs); 
   
    echo '<option value="all_sgbds">Tous SGBDS.</option>';  
    for($ri = 0; $ri < $num_sgbds; $ri++) { 
     $row = pg_fetch_array($ReqSGBDs, $ri); 
     print('<option value="'.$row['sgbd_id'].'">'.$row['sgbd_desc'].' - '.$row['sgbd_version'].'</option>'); 
    } 
     
    pg_free_result($ReqSGBDs); 

   ?> 
   </select> 
  </div>  
  <a href="'.$_SERVER['PHP_SELF'].'?Afficher=ok&date_inventaire='.$Liste_DATES.'&bu_id='.$Liste_BUS.'">LANCER LA RECHERCHE</a> 
  </form> 
  <br />   

 </body> 

 <footer> 
  <br /><a href="../index.php" > Retour Accueil</a> 
 </footer> 

</html> 



J'entends déjà les frondes de certains concernant la syntaxe... (pour rappel, je débute)

Pour résumé:
il y a 4 listes déroulantes, basées sur des tables en bases de données (postgres, mais cela importe peu).

La première liste et un select distinct sur la table "principale".
Une fois la date choisie, je dois afficher la liste des "B.U.", mais uniquement celles pour lesquelles j'ai des enregistrements pour la date en question. On poursuite avec les serveurs, qui sont définis pour la B.U. choisie, puis finalement le sgbd pour le serveur choisi.
Ma question 1: Comment extraire les valeurs d'une liste pour les passer à la suivante?
Ma question 2: Comment gérer la liste des valeurs si je passe mes listes déroulantes en choix multiple?

D'avance merci pour votre aide.

Très cordialement.

Antonio.



1 réponse

DarkAurora Messages postés 417 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 21 janvier 2013 27
31 oct. 2012 à 09:17
C'est simple et en même temps compliqué, lorsque l'utilisateur fait sa sélection il s'agit d'un évènement, qui à ma connaissance ne peut être détecté en javascript/jQuery, donc lorsqu'un élément de ta liste est sélectionné, il suffit de le récupérer en JS et de faire une requête sur ta BDD pour récupérer une valeur associé, tu auras besoin de faire un peu d'AJAX pour passer du JS au PHP

ici tu as toute l'API jQuery (plus simple à prendre en main et plus efficace que JS) en anglais mais ce site est bien fait : https://api.jquery.com/

si tu as des questions ou si je n'ai pas bien répondu à ta question n'hésite pas à poster ici
0