Partage
  • Partager sur Facebook
  • Partager sur Twitter

Listes déroulantes liées

Sujet résolu
    25 mars 2020 à 16:15:44

    Bonjour,

    J'ai fait un petit code pour récupérer des données d'une table sql pour générer 3 listes déroulantes liées. Jusque là tout va bien, cela fonctionne comme je souhaite.

    Mais je m'interroge sur la pertinence du code. Je répète deux fois le même truc et je suis pas sure que ce soit le plus optimale...

    Une idée ?

    Ma partie formulaire :

     <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>

    Ma partie AJAX qui se situe avant <body>

        //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);
          }
          });
        }

    La page get_sousfamille.php

    <?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
      {
       
      }
    ?>

    La partie get_soussousfamille :

    <?php
      require_once("confiig.php");
    
      if (!empty($_POST['sousfamille'])) 
      {
        //on vérifie qu'il y a des données en sous sous familles sinon on affiche pas la liste déroulante.
        $req_ssssfamille = $bdd->query('SELECT * FROM matfamille WHERE supFam = '.$_POST['sousfamille'].' AND idFam != supFam');
    
          if($req_ssssfamille->rowCount()>0) //si on a des résultats on affiche la liste déroulante
          {
            echo '<label>Sous famille:</label><select name="soussous_famille" >';
            echo '<option value="">Sélectionnez la sous famille</option>';
    
            foreach($req_ssssfamille as $ssssfmll) 
            {
                echo '<option value="'.$ssssfmll["idFam"].'">'.$ssssfmll["nom"].'</option>';
            }
            echo '</select>';
    
    
          }//fin if rowcount > 0
          else
          {}
      }//fin if not empty
      else
      {
       
      }
    ?>

    Donc je m'interroge sur le fait que j'ai deux fois dans ma partie AJAX la même chose ou presque avec sousfamille et soussousfamille.

    Il y a peut être une autre manière de procéder ?

    Merci de votre aide

    (désolée pour le code ci dessous, je n'arrive pas à supprimer, ça bug)
     

    <?php
    
    
    if(!empty($_POST) && !empty($_POST['liste_famille']))
    {
      extract($_POST);
      $liste_famille = $_POST['liste_famille'];
      
     include("confiig.php");
      echo '<table>
      <tr>
        <th></th>
        <th>Nom</th>
        <th>Num.</th>
        <th>Statut</th>
        </tr>';
      $req = $bdd->query('SELECT IdCpt,NomMat FROM materiel WHERE IdFam = '.$_POST['liste_famille'].' ORDER BY IdCpt');
      
      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</h2>';
      }
    }
    
    else
    {
      echo '<h2>Aucun resultat</h2>';
    }
    
    
    ?>
    



    -
    Edité par zazzou 26 mars 2020 à 16:30:03

    • Partager sur Facebook
    • Partager sur Twitter
      27 mars 2020 à 9:37:46

      Bonjour zazzou,

      Perso j'aurai fait 1 seul fichier php "get_famille.php" et idem pour l'ajax

      Regarde (sécurité):

      https://www.php.net/manual/fr/security.database.sql-injection.php

      -
      Edité par AliasDmc 27 mars 2020 à 9:41:44

      • Partager sur Facebook
      • Partager sur Twitter
      Découvrez les Css avec la zonecss.fr
        27 mars 2020 à 11:00:46

        Bonjour,

        Merci j'ai fait une requête préparée.

        Justement, un seul fichier php get_famille.php et idem pour l'ajax : je ne vois pas comment faire en fait...

        Une précision ?

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          27 mars 2020 à 11:17:13

          Hello,

          c'est cool d'essayer de factoriser son code.

          Tu peux essayer quelque chose comme ça : 

          // La fonction
          function getFamily(url, params, success) {
            $.ajax({
              type: "POST",
              url: url,
              data: [params],
              success: success
            });
          }
          
          // Les appels
          getFamily('get_sousfamille.php', {liste_famille: this.value}, function(data) {
            $("#list-sousfamille").html(data);
          });
          
          getFamily('get_soussousfamille.php', {sousfamille: this.value}, function(data) {
            $("#list-soussousfamille").html(data);
          });

          Pour plus de lisibilité tu devrais sortir le onChange=" de ton html généré et appeler cela dans un fichier js.

          • Partager sur Facebook
          • Partager sur Twitter
            27 mars 2020 à 11:31:08

            Hello

            Merci !

            Je n'arrive pas trop à mettre en application pour l'instant... je ne comprends pas trop où je dois insérer les appels ?

            • Partager sur Facebook
            • Partager sur Twitter
              27 mars 2020 à 12:10:32

              Tu peux les insérer dans les onChange pour le moment, même si c'est pas très propre :D
              • Partager sur Facebook
              • Partager sur Twitter
                27 mars 2020 à 12:44:12

                Et si je veux les sortir , comment je peux faire ?
                • Partager sur Facebook
                • Partager sur Twitter
                  27 mars 2020 à 15:35:59

                  Tu peux utiliser un sélecteur jQuery pour le récupérer :

                  $('#liste_famille').change(function(event) => {
                    getFamily('get_sousfamille.php', {liste_famille: event.target.value}, function(data) {
                    $("#list-sousfamille").html(data);
                  });
                  });


                  Quelque chose comme ça

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 mars 2020 à 19:20:35

                    Merci cela fonctionne bien !

                    EDIT : en fait non pour le moment cela ne fonctionne pas.

                    J'ai fait ceci :

                     <select name="liste_famille" id="liste_famille" >
                                    <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>

                    Et après juste avant </body>

                      //récupération de liste famille pour chercher les sous familles
                      $('#liste_famille').change(function(event)  {
                      getFamily('get_sousfamille_bis.php', {liste_famille: event.target.value}, function(data) {
                      $("#list-sousfamille").html(data);
                    });
                    });
                    




                    D'ailleurs, ce que j'aimerais faire ensuite, c'est d'afficher les données qui correspondent à la sélection faite dans les listes déroulantes.

                    J'ai réussi à faire ceci :

                     //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_famille5.php',
                                  data: 'liste_famille='+$('#liste_famille').val(),
                                  
                                  beforeSend:function(){
                                    $('.loader').stop().fadeIn();
                                  },
                                  
                                  success: function(data){
                                    $('.loader').fadeOut();
                                    $('#result_par_familles').html(data);
                                  }
                                });
                              
                            });
                          });

                    Cela me donne les résultats par famille lorsque j'ai choisi un élément dans la première liste déroulante et que cet élément est tout seul cad qu'il n'ouvre pas une autre liste déroulante.

                    Comment faire pour récupérer et afficher lorsque je sélectionne les éléments de la liste 1 + liste 2 + liste 3. Sachant donc que certains éléments n'ont rien dans la liste 2 et d'autres sont 1 et 2 mais sans 3.

                    Je sais pas si je suis claire....

                    Merci

                    -
                    Edité par zazzou 27 mars 2020 à 19:27:23

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 mars 2020 à 10:47:00

                      Bonjour,

                      Je re poste ici l'idée de AliasDmc:

                      Codepen : https://codepen.io/Zonecss/pen/OJVrQPP

                      Seulement voilà, je n'arrive pas à comprendre comment modifier la partie :

                      function retourAjax(sType){
                        let sData ='';
                        let iRandom = Math.floor(Math.random() * Math.floor(3));
                      
                        if(sType==1){
                          //appel select famille
                          if(iRandom%2 !=0 ){
                            //si iRandom est ubn nombre impair
                            //j'ai des sous famille
                            sData = '<label>Sous famille:</label>'
                              +'<select name="sous_famille" > '
                              +'<option value="">Sélectionnez la sous famille</option>'
                              +'<option value="1s">sousFamille[1]</option>'
                              +'<option value="2s">sousFamille[2]</option>'
                              +'<option value="3s">sousFamille[3]</option>'
                              +'<option value="4s">sousFamille[4]</option>'
                              +'</select>'
                          }else{
                            //si iRandom est un nombre pair
                            //j'ai pas des sous  famille
                            // je vais donc chercher les resultats
                            sData ='Sous famille: Aucun resultat<br><scr'+'ipt>getResultat()</scr'+'ipt>';
                          }      
                        }else if(sType==2){
                          //appel select sous famille
                          if(iRandom%2 !=0 ){
                            //si iRandom est ubn nombre impair
                            //j'ai des sous sous famille
                            sData = '<label>Sous Sous famille:</label>'
                              +'<select name="soussous_famille" > '
                              +'<option value="">Sélectionnez la sous sous famille</option>'
                              +'<option value="1ss">soussousFamille[1]</option>'
                              +'<option value="2ss">soussousFamille[2]</option>'
                              +'<option value="3ss">soussousFamille[3]</option>'
                              +'<option value="4ss">soussousFamille[4]</option>'
                              +'</select>';
                          }else{
                            //si iRandom est un nombre pair
                            //j'ai pas des sous sous famille
                            // je vais donc chercher les resultats
                            sData ='SousSous famille: Aucun resultat<br><scr'+'ipt>getResultat(true)</scr'+'ipt>';
                          } 
                        }else if(sType==3){
                          //appel resultat
                          sData = '<table>'
                            +'<tr>'
                            +'<th>Résultat</th>'
                            +'<td>Résultat[1]</td>'
                            +'<td>Résultat[2]</td>'
                            +'<td>Résultat[3]</td>'
                            +'</tr>'
                            +'</table>';
                        }
                        return sData;
                      }//fct

                      Pour afficher mes données de ma base de données à la place...

                      Une idée ?

                      Merci pour votre aide

                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 mars 2020 à 11:59:41

                        Bonjour

                        Remplace tous les retourAjax(Nombre) par data

                        j'ai mis des commentaires dans le codepen

                        Codepen : https://codepen.io/Zonecss/pen/OJVrQPP

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Découvrez les Css avec la zonecss.fr
                          30 mars 2020 à 12:41:28

                          Re.

                          Ah ok. J'avais essayé de faire $("#list-sousfamille").html(data); mais évidemment que ca marchait pas.

                          Bon par contre lorsque je mets         retourAjax(1) = data;
                          Cela me provoque une erreur :

                          "ReferenceError: cannot assign to function call"


                          :-(

                          Pourquoi ?

                          • Partager sur Facebook
                          • Partager sur Twitter
                            30 mars 2020 à 12:55:12

                            Bonjour

                            Dans le méthode getFamily

                            j'utilise error au lieu de "success" parceque codepen ne trouve pas les pages

                            il faut donc changer dans ton script ( j'avais mis un commentaire)

                            Fait aussi un console.log(data) pour voir la valeur de data dans la console des logs du navigateur

                            Est il possible d'avoir une url de test

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Découvrez les Css avec la zonecss.fr
                              30 mars 2020 à 14:04:13

                              J'ai bien modifier success. Je remets mon code ci)après. Le console.log(data) ne marche pas cela me renvoit une erreur "ReferenceError: data is not defined'

                              Compliqué pour moi de mettre une url de test, je met le code ci-après, j'ai du faire une erreur qqle part :

                              function getFamily(url, params, success) {
                                $.ajax({
                                  type: "POST",
                                  url: 'search_matos_famille4.php',
                                  data: [params],
                                  success: success
                                });
                              }//fct
                              function resetResultatHtmlZone(){
                                $("#result_par_familles").html(""); 
                              }//fct
                              function resetSousSousFamilleHtmlZone(){
                                $("#list-soussousfamille").html("");
                              }//fct
                              function resetSousFamilleHtmlZone(){
                                $("#list-sousfamille").html("");
                              }//fct
                              
                              function getResultat(bSecondeEtape){
                                let oForm = document.forms["formulaire_recherche"];
                                let oSelects = {
                                  "liste_famille": oForm["liste_famille"].value 
                                };
                                if(bSecondeEtape === true){
                                  oSelects["liste_sousfamille"] =  oForm["sous_famille"].value
                                }
                                console.log(oSelects)
                                getFamily('search_matos_famille4.php', oSelects , function(data) { 
                                  $("#result_par_familles").html(retourAjax(3));
                                });
                              }//fct
                              
                              //Simule retour AJAX
                              function retourAjax(sType){
                                let sData ='';
                                let iRandom = Math.floor(Math.random() * Math.floor(3));
                              
                                if(sType==1){
                                  //appel select famille
                                  if(iRandom%2 !=0 ){
                                    //si iRandom est ubn nombre impair
                                    //j'ai des sous famille
                                    sData = '<label>Sous famille:</label>'
                                      +'<select name="sous_famille" > '
                                      +'<option value="">Sélectionnez la sous famille</option>'
                                      +'<option value="1s">sousFamille[1]</option>'
                                      +'<option value="2s">sousFamille[2]</option>'
                                      +'<option value="3s">sousFamille[3]</option>'
                                      +'<option value="4s">sousFamille[4]</option>'
                                      +'</select>'
                                  }else{
                                    //si iRandom est un nombre pair
                                    //j'ai pas des sous  famille
                                    // je vais donc chercher les resultats
                                    sData ='Sous famille: Aucun resultat<br><scr'+'ipt>getResultat()</scr'+'ipt>';
                                  }      
                                }else if(sType==2){
                                  //appel select sous famille
                                  if(iRandom%2 !=0 ){
                                    //si iRandom est ubn nombre impair
                                    //j'ai des sous sous famille
                                    sData = '<label>Sous Sous famille:</label>'
                                      +'<select name="soussous_famille" > '
                                      +'<option value="">Sélectionnez la sous sous famille</option>'
                                      +'<option value="1ss">soussousFamille[1]</option>'
                                      +'<option value="2ss">soussousFamille[2]</option>'
                                      +'<option value="3ss">soussousFamille[3]</option>'
                                      +'<option value="4ss">soussousFamille[4]</option>'
                                      +'</select>';
                                  }else{
                                    //si iRandom est un nombre pair
                                    //j'ai pas des sous sous famille
                                    // je vais donc chercher les resultats
                                    sData ='SousSous famille: Aucun resultat<br><scr'+'ipt>getResultat(true)</scr'+'ipt>';
                                  } 
                                }else if(sType==3){
                                  //appel resultat
                                  sData = '<table>'
                                    +'<tr>'
                                    +'<th>Résultat</th>'
                                    +'<td>Résultat[1]</td>'
                                    +'<td>Résultat[2]</td>'
                                    +'<td>Résultat[3]</td>'
                                    +'</tr>'
                                    +'</table>';
                                }
                                return sData;
                              }//fct
                              
                              $(document).ready(function(){
                                let oForm = document.forms["formulaire_recherche"];
                                $(oForm["liste_famille"]).on("change", function(){
                                  //Suppression des contenus html des sous familles et resultat
                                  resetSousFamilleHtmlZone()
                                  resetSousSousFamilleHtmlZone();
                                  resetResultatHtmlZone();
                                  // si je ne suis pas "Sélectionnez la ..."
                                  if(this.value != "" ){
                                    //je fais l'appel ajax pour remplir list-sousfamille
                                    getFamily('get_sousfamille4.php', {'liste_famille': this.value}, function(data) { 
                                      retourAjax(1) = data;
                                      $("#list-sousfamille").html(retourAjax(1));
                                    });
                                  }
                                });//fin de on
                                console.log(oForm["liste_famille"]);
                                console.log(data);
                                $("#list-sousfamille").on("change",oForm["sous_famille"], function(oEvent){
                                  //Suppression des contenus html des sous familles et resultat
                                  resetSousSousFamilleHtmlZone()
                                  resetResultatHtmlZone();
                                  let oSelect = oEvent.target;
                                  // si je ne suis pas "Sélectionnez la ..."
                                  if(oSelect.value != "" ){
                                    //je fais l'appel ajax pour remplir list-soussousfamille
                                    getFamily('get_soussousfamille.php', {'liste_sousfamille': oSelect.value}, function(data) { 
                                      $("#list-soussousfamille").html(retourAjax(2));
                                    });
                                  }
                                });
                              
                                $("#list-soussousfamille").on("change",oForm["soussous_famille"], function(oEvent){
                                  //Suppression des contenus html resultat
                                  resetResultatHtmlZone();    
                                  let oSelect = oEvent.target; 
                                  // si je ne suis pas "Sélectionnez la ..."
                                  if(oSelect.value != "" ){ 
                                    //Récupération des valeur des 3 listes
                                    let oSelects = {'liste_famille': oForm["liste_famille"].value,
                                                    'liste_sousfamille': oForm["sous_famille"].value,
                                                    'soussous_famille': oForm["soussous_famille"].value
                                                   }
                                    //je fais l'appel ajax pour remplir le result_par_familles
                                    getFamily('search_matos_famille4.php', oSelects , function(data) { 
                                      $("#result_par_familles").html(retourAjax(3));
                                    });
                                  }
                                });
                              
                              });
                              

                              Merci beaucoup de ton aide

                              • Partager sur Facebook
                              • Partager sur Twitter
                                30 mars 2020 à 14:47:03

                                Bonjour,

                                Essaye ce code,il fonctionne chez moi :

                                function getFamily(sUrl, params, fctSuccess) {
                                  $.ajax({
                                    type: "POST",
                                    url: sUrl,
                                    data: [params],
                                    success: fctSuccess
                                  });
                                  console.log(url, params, fctSuccess);
                                }//fct
                                function resetResultatHtmlZone(){
                                  $("#result_par_familles").html("");
                                }//fct
                                function resetSousSousFamilleHtmlZone(){
                                  $("#list-soussousfamille").html("");
                                }//fct
                                function resetSousFamilleHtmlZone(){
                                  $("#list-sousfamille").html("");
                                }//fct
                                
                                function getResultat(bSecondeEtape){
                                  let oForm = document.forms["formulaire_recherche"];
                                  let oSelects = {
                                    "liste_famille": oForm["liste_famille"].value
                                  };
                                  if(bSecondeEtape === true){
                                    oSelects["liste_sousfamille"] =  oForm["sous_famille"].value
                                  }
                                 
                                  getFamily('search_matos_famille4.php', oSelects , function(data) {
                                    $("#result_par_familles").html(data);
                                  });
                                }//fct
                                
                                
                                $(document).ready(function(){
                                  let oForm = document.forms["formulaire_recherche"];
                                  $(oForm["liste_famille"]).on("change", function(){
                                    //Suppression des contenus html des sous familles et resultat
                                    resetSousFamilleHtmlZone();
                                    resetSousSousFamilleHtmlZone();
                                    resetResultatHtmlZone();
                                    // si je ne suis pas "Sélectionnez la ..."
                                    if(this.value != "" ){
                                      //je fais l'appel ajax pour remplir list-sousfamille
                                      getFamily('get_sousfamille4.php', {'liste_famille': this.value}, function(data) {
                                          console.log(data);
                                        $("#list-sousfamille").html(data);
                                      });
                                    }
                                  });//fin de on
                                  console.log(oForm["liste_famille"]);
                                  $("#list-sousfamille").on("change",oForm["sous_famille"], function(oEvent){
                                    //Suppression des contenus html des sous familles et resultat
                                    resetSousSousFamilleHtmlZone();
                                    resetResultatHtmlZone();
                                    let oSelect = oEvent.target;
                                    // si je ne suis pas "Sélectionnez la ..."
                                    if(oSelect.value != "" ){
                                      //je fais l'appel ajax pour remplir list-soussousfamille
                                      getFamily('get_soussousfamille.php', {'liste_sousfamille': oSelect.value}, function(data) {
                                
                                              console.log(data);
                                        $("#list-soussousfamille").html(data);
                                      });
                                    }
                                  });
                                
                                  $("#list-soussousfamille").on("change",oForm["soussous_famille"], function(oEvent){
                                    //Suppression des contenus html resultat
                                    resetResultatHtmlZone();
                                    let oSelect = oEvent.target;
                                    // si je ne suis pas "Sélectionnez la ..."
                                    if(oSelect.value != "" ){
                                      //Récupération des valeur des 3 listes
                                      let oSelects = {'liste_famille': oForm["liste_famille"].value,
                                                      'liste_sousfamille': oForm["sous_famille"].value,
                                                      'soussous_famille': oForm["soussous_famille"].value
                                                     }
                                      //je fais l'appel ajax pour remplir le result_par_familles
                                      getFamily('search_matos_famille4.php', oSelects , function(data) {
                                          console.log(data);
                                        $("#result_par_familles").html(data);
                                      });
                                    }
                                  });
                                
                                });



                                • Partager sur Facebook
                                • Partager sur Twitter
                                Découvrez les Css avec la zonecss.fr
                                  30 mars 2020 à 14:56:40

                                  Je dois me gourer. Il faut que je remplace sUrl par une url non ?

                                  Sans rien faire et en mettant le code tel quel, j'obtiens l'erreur url is not defined.

                                  En mettant search_matos_famille4.php à la place de sUrl, je n'ai plus d'erreur mais cela ne génère plus de liste déroulante sous famille / sous sous famille.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 mars 2020 à 15:05:07

                                    Bonjour,

                                    n'a rien a remplacer juste faire un copier coller (il y a eu des petites modif)

                                    Il est possible que les chemins ajax ne soient pas bon mais là j'en sais rien :

                                    modifier si nécessaire les chemins vers les fichiers search_matos_famille4.php (ligne 29) ,  get_sousfamille4.php (ligne 45), etc..

                                    -------------------

                                    Petite erreur en effet ligne 8 j'ai oublié de modifier url par sUrl

                                    ----------------------

                                    Met des logs dans tes fichiers php pour voir si tu recupères les bonnes valeurs

                                    Met des echo de texte (temporaire) dans tes else vide

                                    -
                                    Edité par AliasDmc 30 mars 2020 à 15:15:39

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Découvrez les Css avec la zonecss.fr
                                      30 mars 2020 à 15:19:56

                                      OK je viens d'identifier le potentiel problème. Dès le départ, dans get_sousfamille4.php :

                                      <?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->prepare('SELECT * FROM matfamille WHERE supFam = ? AND idFam != supFam');
                                          $req_ssfamille->execute(array($_POST['liste_famille']));
                                      
                                                echo' <label>Sous famille:</label><select name="sous_famille">';
                                                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 not empty
                                        else
                                        {
                                          echo 'erreur pas bien';
                                         
                                        }
                                      ?>

                                      Il ne trouve pas en fait $_POST['liste_famille'] ... il ne connait pas.

                                      Je comprends pas trop comment je peux récupérer la donnée du coup...

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        31 mars 2020 à 9:09:59

                                        Bonjour,

                                         Replace la fonction getFamily

                                        function getFamily(sUrl, params, fctSuccess) {
                                          $.ajax({
                                            type: "POST",
                                            url: sUrl,
                                            data: params, // anciennement [params]
                                            success: fctSuccess
                                          }); 
                                        }//fct



                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Découvrez les Css avec la zonecss.fr
                                          31 mars 2020 à 10:07:36

                                          Yeaaaaaaah !

                                          J'ai adapté pour afficher les données si il n'y a pas de sous famille ou de sous sous famille et c'est top !

                                          Merci beaucoup pour ton aide, parce que cela faisait des jours que je planchais là dessus !

                                          Bonne journée !

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Listes déroulantes liées

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown