Bonjour,
J'ai fait une petite page où je génère trois listes déroulantes liées en AJAX. Cela fonctionne bien (même si je suis sceptique sur l'optimisation de mon code). Ces trois listes sont alimentées par une base de données MySQL.
Voici mon problème :
J'aimerai que lorsque je sélectionne un truc dans la liste 1, puis un autre dans la liste 2, puis un autre dans la liste 3, cela m'affiche dessous les données qui correspondent au matériel dont ldFam est égal à celui choisi dans la liste.
Le problème c'est que j'ai réussi à faire le truc uniquement lorsque je choisi dans la liste 1 uniquement. J'ai certaines données de ma liste 1 qui sont tout seul (ils ne sont pas liés à autre chose donc la liste 2 et 3 ne s'affichent pas).
Mais je ne parviens pas à faire le reste.... un petit coup de main ? Si vous avez des pistes....

Mon code :
Le formulaire :
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 <form action="search_matos2.php" method="post" name="formulaire_recherche">
 
        <label for="numero_materiel">Numéro de matériel : <input type="number" min="1" name="numero_materiel" id="numero_materiel" /></label><input type="button" class="add" value="Ajouter le matériel">
 
        <div class="loader"></div>
        <p><input type="text" name="choix_materiel_champ" id="choix_materiel_champ" value="" style="display: none;"></p>
        <p><input type="text" name="nom_materiel_champ" id="nom_materiel_champ" value="" style="display: none;"></p>
 
        <!--listes déroulantes familles -->
 
        <label>Famille :</label>
            <select name="liste_famille" id="liste_famille" onChange="GetSousFamille(this.value);">
                <option value="">Sélectionnez la famille</option>
                <?php
                //on va générer la première liste famille niveau 1
                include('confiig.php');
                $req = $bdd->query("SELECT * FROM matfamille");
 
 
                foreach($req as $famille) {
                ?>
                <option value="<?php echo $famille["idFam"]; ?>"><?php echo $famille["nom"]; ?></option>
                <?php
                }
                ?>
            </select>
        <div class="loader"></div>
 
        <br/>
 
        <div id="list-sousfamille"></div>
 
        <div id="list-soussousfamille"></div>
 
    </form>
 
  <div id="result"></div>
  <div id="result_par_familles"></div>

Le bout d'ajax qui permet d'afficher al liste 2 et la liste 3 ainsi que le bout qui va chercher les données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
    //générer les listes déroulantes pour les sous familles de matériel.
    function GetSousFamille(val) {
      $.ajax({
      type: "POST",
      url: "get_sousfamille.php",
      data:'liste_famille='+val,
      success: function(data){
        $("#list-sousfamille").html(data);
      }
      });
    }
    function GetSousSousFamille(val) {
      $.ajax({
      type: "POST",
      url: "get_soussousfamille.php",
      data:'sousfamille='+val,
      success: function(data){
        $("#list-soussousfamille").html(data);
      }
      });
    }
 //recherche dans la base existante pour premiere liste
    $(document).ready(function(){
        $('.loader').hide();
 
        $('#liste_famille').keyup(function(){
 
          $('#result_par_familles').html('');
 
            $.ajax({
              type: 'POST',
              url: 'search_matos_famille.php',
              data: 'liste_famille='+$('#liste_famille').val(),
 
              beforeSend:function(){
                $('.loader').stop().fadeIn();
              },
 
              success: function(data){
                $('.loader').fadeOut();
                $('#result_par_familles').html(data);
              }
            });
 
        });
      });
Et la page search_matos_famille.php :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?php
include("confiig.php");
 
if(!empty($_POST) && !empty($_POST['liste_famille']))
{
    extract($_POST);
    $search_family = $_POST['liste_famille'];
 
    echo '<table>
    <tr>
      <th></th>
      <th>Nom</th>
      <th>Num.</th>
      <th>Statut</th>
      </tr>';
    $req = $bdd->prepare('SELECT IdCpt,NomMat FROM materiel WHERE IdFam = ? ORDER BY IdCpt');
    $req->execute(array($search_family));
 
    if($req->rowCount()>0)
    {
      while($data = $req->fetch(PDO::FETCH_OBJ))
      {
 
        echo'<tr>';
        echo '<td><input type="radio" name="choix_materiel" id="choix_materiel_'.$data->IdCpt.'" data-name="'.$data->NomMat.'"  value="'.$data->IdCpt.'" onchange="remplir()"></td><td><label for="choix_materiel_'.$data->IdCpt.'">'.strtoupper($data->NomMat).'</label>
        <input type="hidden" name="nom_materiel" id="nom_materiel_'.$data->IdCpt.'" value="'.$data->NomMat.'" onchange="remplir()" >';
        echo '</td><td>'.$data->IdCpt.'</td>';
        echo '<td></td></tr>';
      }
      echo '</table>';
    }
    else
    {
      echo '<h2>Aucun resultat (1)</h2>';
    }
}
 
else //else post empty
{
  echo '<h2>Aucun resultat (2)</h2>';
}
 
 
?>

Et la page get_sousfamille (je ne mets pas get_soussousfamille qui est presque identique)
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
  require_once("confiig.php");
 
  if (!empty($_POST['liste_famille'])) 
  {
    //on vérifie qu'il y a des données en sous sous familles et qui ne sont pas les titres. Sinon pas de liste.
    $req_ssfamille = $bdd->query('SELECT * FROM matfamille WHERE supFam = '.$_POST['liste_famille'].' AND idFam != supFam');
 
      if($req_ssfamille->rowCount()>0) //si on a des résultats on affiche la liste déroulante
      {
          echo' <label>Sous famille:</label><select name="sous_famille" onChange="GetSousSousFamille(this.value);">';
          echo '<option value="">Sélectionnez la sous famille</option>';
 
          foreach($req_ssfamille as $ssfmll) 
          {
             echo '<option value="'.$ssfmll["idFam"].'">'.$ssfmll["nom"].'</option>';
          }
          echo '</select>';
      }//fin if($req_ssfamille->rowCount()>0) 
      else{}
  }//fin if not empty
  else
  {
 
  }
?>

Merci pour vos pistes :-)