plusieurs autocomplètes à partir de ma base de données

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] plusieurs autocomplètes à partir de ma base de données

    Salut à tous,
    Dans le premier champ de mon formulaire, j'ai mis un autocomplète qui interroge la table 1 de ma base de données et il fonctionne bien !
    Dans le deuxième champs, je voudrais en mettre un qui interroge la table 2, mais je n'y arrive pas car avec ce script, le champ de formulaire autocomplète doit impérativement s'appeler 'search' et je ne peux pas mettre deux champ avec le même nom dans le même formulaire .

    Voici le code que j'utilise :

    dans ma page search.php

    <?
    require_once 'conn.php';

    $search = $_GET['term'];

    $query = $conn->query("SELECT * FROM `matable` WHERE `monchamp` LIKE '$search%' ORDER BY `monchamp` ASC") or die(mysqli_connect_errno());

    $list = array();
    $rows = $query->num_rows;

    if($rows > 0){
    while($fetch = $query->fetch_assoc()){
    $data['value'] = $fetch['monchamp'];
    array_push($list, $data);
    }
    }

    echo json_encode($list);

    ?>


    et sur mon index.php

    <body>

    <div class="form-group">
    <form action="" method="POST">
    <label>Search Product here...</label>
    <div class="auto-widget">
    <input class="form-control" id="search" type="text" name="product"/>
    <input class="form-control" id="search2" type="text" name="product2"/>
    </div>
    </form>

    </body>
    <script src="js/jquery-3.2.1.min.js"></script>
    <script src="js/jquery-ui.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
    $("#search").autocomplete({
    source: 'search.php',
    minLength: 0,
    });
    });
    </script>


    Donc sur le champs<input class="form-control" id="search" type="text" name="product"/> l'autocomplete marche nickel.
    Mais je ne vois pas comment appliquer ce script sur mon champs <input class="form-control" id="search2" type="text" name="product2"/>

    Peut être que ce n'est pas possible avec ce script ?
    Si vous avez une solution, merci de votre aide !

  • #2
    Salut Mediax,

    Comme on se retrouve

    Je pense que j'aurais plus fait un truc du genre:

    $('#search, #search2').on('click', function(){
    $(this).autocomplete({
    source: 'search.php',
    minLength: 0,
    });
    });


    Ici j'ajoute un écouteur d'évènement de type 'au click' sur mes deux id's. Celui qui est cliqué est envoyé dans le php et renvoi les infos logiquement.
    Dis moi si ça fonctionne.

    Passe une belle journée !
    mediax aime ceci.

    Commentaire


    • #3
      Bonjour,

      Comme d'habitude, tu m'offre une réponse claire et constructive !
      Je teste ça et te tiens au courant.
      Merci et belle journée à toi aussi !

      Commentaire


      • #4
        Super, ça marche pour l'autocomplete sur les deux champs !!!

        Mais je voudrais que le champs 2 de mon formulaire interroge la table 2 de ma BDD alors que pour le moment, la requête dans search.php n'interroge que la table 1.

        Est-ce qu'il y à moyen de faire une deuxième requête sur search.php pour remplir le champs 2 de mon formulaire ???



        Commentaire


        • #5
          Alors, je me suis dit que je pouvais passer des variable d'url pour spécifier la table et champ que je voulais utiliser pour ma requête :

          $('#search').on('click', function(){
          $(this).autocomplete({
          source: 'search.php?table=
          matable&champ=monchamp',
          minLength: 0,
          });
          });

          $('#search2').on('click', function(){
          $(this).autocomplete({
          source: 'search.php?table=
          matable2&champ=monchamp2',
          minLength: 0,
          });
          });


          Mais ça ne marche que pour $('#search')
          $('#search2')
          reste vide

          Commentaire


          • #6
            Bon, j'avance !!!

            J'ai fait ça :

            $(document).ready(function(){
            $('
            #search').on('click', function(){
            $(this).autocomplete({
            source: 'autocomp/search.php?table=
            matable1&champ=monchamp1',
            minLength: 0,
            });
            });
            });

            $(document).ready(function(){
            $('
            #search2').on('click', function(){
            $(this).autocomplete({
            source: 'autocomp/search.php?table=
            matable2&champ=monchamp2',
            minLength: 0,
            });
            });
            });


            Ca fonctionne, mais je ne suis pas certain que ce soit le meilleur moyen !

            Commentaire


            • #7
              Salut Mediax,

              J'espère que tu as passé un bon week-end (à coder à ce que je vois ).

              Ta dernière solution est exact effectivement. Si tu veux, j'ai une version j'ai fais moins de lignes de codes:

              Pour la partie jQuery:

              $(document).ready(function(){
              $('#search, #search2').on('click', function(){
              let name =$(this)[0].name
              $(this).autocomplete({
              source: 'search.php?name=' + name,
              minLength: 0,
              });
              });
              });


              Pour cette partie on récupère l'attribut "name" du champ input (exemple pour $('search') :: "product")

              Pour la partie search.php

              <?
              require_once 'conn.php';
              $search = $_GET['name'];
              switch ($search) {
              case "product":
              $matable ="matable"
              break;
              case "product2":
              $matable="matable2"
              break;
              }

              $query = $conn->query("SELECT * FROM `$matable` WHERE `monchamp` LIKE '$search%' ORDER BY `monchamp` ASC") or die(mysqli_connect_errno());
              $list = array();
              $rows = $query->num_rows;
              if($rows > 0){
              while($fetch = $query->fetch_assoc()){
              $data['value'] = $fetch['monchamp'];
              array_push($list, $data);
              }
              }
              echo json_encode($list);
              ?>


              Ici je récupère le nom de l'input dans l'url ("name) et je fais un switch/case (plus rapide qu'un if/else) pour aller chercher la table qui sera appelé.

              Dis moi si c'est good comme ça

              Passe une belle journée et une bonne semaine !

              Commentaire


              • #8
                Salut Michel,

                Merci pour le temps que tu passes à m'expliquer les choses !
                Je verrais cette simplification du code plus tard, car j'essaye d'avancer sur mon site et je suis confronté à un nouveau problème !.

                J'essaye de faire une boucle qui à chaque passage, deux variables $a et $b change de valeur.
                Au premier passage $a=$A1 et $b=$B1
                Au second passage $a=$A2 et $b=$B2

                J'essaye des "trucs" , mais là je crois que je suis loin du but. Je n'ai aucune idée de la façon de faire.

                Voici ce que j'ai fait avec les quelques infos que j'ai trouvées sur le web : (on ne rit pas !!!)


                // boucle
                $array = array( ($a=$A1)=>($b=$B1), ($a=$A2)=>($b=$B2), ($a=$A3)=>($b=$B3);

                foreach( $array as $value ) // on parcourt $array, la valeur de l'item courant est copiée dans $value

                {
                $enregister = "INSERT INTO matable (champ1, champ2) VALUES ( '$a', '$b')";
                // Exécution de la reqête
                mysqli_query($connection, $enregister) or die('Erreur SQL !'.$enregister.'<br>'.mysqli_error($conn ection));
                }

                unset($value); // Détruit la référence sur le dernier élément

                Commentaire


                • #9
                  Bon, je commence à comprendre le principe des boucles. j'ai donc modifié mon code :

                  $array = array( ($a1=>$b1, $a2=>$b2, $a3=>$b3);
                  foreach( $array as $key => $value )
                  echo $key.$value;


                  jusque la, ça fonctionne !
                  ça m'affiche bien :
                  valeur$a1valeur$b1
                  valeur$a2valeur$b2
                  valeur$a3valeur$b3

                  maintenant, à la place de echo $key.$value;

                  Je voudrais faire :

                  $select = mysqli_query($connection, "SELECT * FROM matable WHERE monchamp1= $key");
                  if(mysqli_num_rows($select)) {
                  echo "il existe";
                  // Requête d'insertion
                  $enregister = "UPDATE matable SET monchamp2 = $value WHERE monchamp1 = $key";
                  // Exécution de la reqête
                  mysqli_query($connection, $enregister) or die('Erreur SQL !'.$enregister.'<br>'.mysqli_error($conn ection));
                  } else {
                  echo "il n'existe pas";
                  // Requête d'insertion
                  $enregister = "INSERT INTO matable(monchamp1, monchamp2) VALUES ('$key', '$value')";
                  // Exécution de la reqête
                  mysqli_query($connection, $enregister) or die('Erreur SQL !'.$enregister.'<br>'.mysqli_error($conn ection));
                  }


                  Pour qu'il m'execute ce script en boucle, mais la, dans tous les cas, il me dit qu'il n'existe pas et il ne m'enregistre que les dernières valeurs de $array , $a3 et $b3

                  Je ne comprends pas pourquoi ???

                  Commentaire


                  • #10
                    Salut Médiax,

                    J'ai commencé Joomla il y a un mois donc je connais pas trop encore le php, je vais pas pouvoir te renseigner à fond. Mais là dans la condition ce qui peut bloquer c'est :

                    if(mysqli_num_rows($select)>0)

                    Je pense qu'il faut ajouter le ">0" pour checker si il y a plus d'un élément.

                    Redis moi !

                    EDIT : J'ai trouvé les solutions là dessus : https://stackoverflow.com/questions/...ed-any-results
                    Dernière édition par MICHEL DEDANS à 18/01/2022, 09h57

                    Commentaire


                    • #11
                      bon ben ...,
                      Ca ne venait pas de la condition, mais juste que j'avais mis des ' et " la ou il n'en fallait pas, et pas mis la ou il en fallait.
                      C'est bon, maintenant ca marche !!!
                      Je continue, mais je ne suis pas au bout de mes peines.
                      Mais le principal, c'est que j'avance :-)

                      Commentaire


                      • #12
                        Courage à toi ! Peut être que tu peux aussi passer le message en réglé car on a répondu à ta problématique de base ?

                        Passe une belle journée.

                        Commentaire


                        • #13
                          Salut Michel,

                          C'est fait !!!
                          Et encore merci pour ton aide qui m'a été précieuse.
                          MICHEL DEDANS aime ceci.

                          Commentaire

                          Annonce

                          Réduire
                          Aucune annonce pour le moment.

                          Partenaire de l'association

                          Réduire

                          Hébergeur Web PlanetHoster
                          Travaille ...
                          X