Partage
  • Partager sur Facebook
  • Partager sur Twitter

autocomplete plusieurs champs

    26 août 2016 à 15:54:07

    Bonjour Tout le monde je tourne en rond depuis ce matin.

    j'aimerais lors de la saisie du nom d'un client. recuperer d'autres informations VIA ma base de donnée.

    j'ai trouvé quelques tutos par ci par, celui la en l'occurance, mais c'est juste 1 champ

    http://chez-syl.fr/2011/12/autocompletion-jquery-mysql/

    pour le moment j'ai ca comme script

    <script>
    $(document).ready(function() {
        $('#fnom').autocomplete({
            serviceUrl: 'client.php',
            dataType: 'json'
        });
    });
    </script>
    

    j'ai un autre champ id "ftel" comment, je voudrais qu'en recuperant fnom, ftel se rempli.?

    rien que ca, je trouve aucun tuto ou alors j'ai mal cherché...

    merci par avance

    -
    Edité par Lucafone 26 août 2016 à 16:10:23

    • Partager sur Facebook
    • Partager sur Twitter
      26 août 2016 à 16:03:44

      Salut,

      http://api.jqueryui.com/autocomplete/#event-response

      Il faut que tu regardes du côté des événements. Quand tu recois un résultat, tu crées un callback qui récupère les données:

      $('#fnom').autocomplete({
              serviceUrl: 'client.php',
              dataType: 'json',
              select: function (event, ui){ //Appelé lorsqu'un utilisateur sélectionne un résultat
                   console.log(ui);
              }
          });

      Cela sous entend que dans ta requête sql tu renvoies toutes les infos nécessaires.

      Après normalement tu peux accéder à tes données avec ui.value

      Et après tu remplis tes champs

      • Partager sur Facebook
      • Partager sur Twitter
      Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
        26 août 2016 à 16:08:32

        merci pour ta réponse Rapide..

        malheureusement je suis pas top en jquery...

        ci joint ma requete :

        <?php
            if(isset($_GET['query'])) {
                // Mot tapé par l'utilisateur
                $q = htmlentities($_GET['query']);
         
                // Connexion à la base de données
                try {
                    $bdd = new PDO('mysql:host=localhost;dbname=www', 'www', 'www');
                } catch(Exception $e) {
                    exit('Impossible de se connecter à la base de données.');
                }
         
                // Requête SQL
                $requete = "SELECT * FROM clients WHERE nom LIKE '". $q ."%' LIMIT 0, 10";
         
                // Exécution de la requête SQL
                $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
         
                // On parcourt les résultats de la requête SQL
                while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
                    // On ajoute les données dans un tableau
                $suggestions['suggestions'][] = $donnees['nom'];
                }
         
                // On renvoie le données au format JSON pour le plugin
                echo json_encode($suggestions);
            }
        ?>
        
        
        
         


        la console est vide

        -
        Edité par Lucafone 27 août 2016 à 5:56:33

        • Partager sur Facebook
        • Partager sur Twitter
          26 août 2016 à 16:57:04

          Dans le script que je t'ai mis, y'a un console.log(). Est ce qu'il te log quelque chose dans la console de ton navigateur ?

          • Partager sur Facebook
          • Partager sur Twitter
          Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
            27 août 2016 à 15:01:59

            Ce serait pas un truc du style: 
            while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
                        // On ajoute les données dans un tableau
                    $suggestions['suggestions'][] = $donnees['nom'];
                    $suggestions['suggestions'][] = $donnees['adresse'];
            
                    }

            Comme ça tu peux récupérer des adresses par éxemple. C'est ça dont tu parles?

            • Partager sur Facebook
            • Partager sur Twitter
              27 août 2016 à 21:53:39

              oui a peu près il faudrait juste qu'adresse soit dans le champs adresse dans le formulaire.

              • Partager sur Facebook
              • Partager sur Twitter
                28 août 2016 à 20:40:38

                Bon, c'est vraiment fait à l'arraché. Mais voilà ce que j'ai à te proposer.

                $('#fnom').autocomplete({
                        serviceUrl: 'client.php',
                        dataType: 'json',
                        success: function (response){ 
                            $('#idAdresse').val('' + response.adresse + '')
                        }
                    });


                Un truc comme ça. Tu comprends ce que j'ai voulu faire?
                Je suis un peu un newb, donc il est probable que j'ai une ou deux erreurs,
                Mais bon voilà mon explication:  

                La fonction success va reprendre ce que tu as echo/return dans ta page requête (après avoir réaliser la requête bien entendu).
                Et jQuery va faire en sorte de le transformer tout ça en data lisible par le client, en l'occurence json.

                Mais franchement, je ne connais pas la autocomplete en question, et moi j'aurais fais du AJAX pur et dur. 

                Bon courage. Jspr que ça ta aidé
                 

                • Partager sur Facebook
                • Partager sur Twitter
                  29 août 2016 à 8:56:06

                  une autre methode je suis prenneur.

                  meme en ajax? il faut juste que je pre-remplisse le formulaire. apres la methode peu importe.

                  j'ai chercher sur le web et je suis tombé sur ces tutos.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 août 2016 à 9:03:38

                    Attention, il n'y a pas de callback success dans autocomplete() ! D'où le callback select().

                    En l'occurence, ton appel effectue déjà une requête ajax, il te permet juste d'avoir en plus quelque chose de "propre" visuellement, avec une petite barre de recherche. Le seul truc qui te manque c'est de traiter correctement ton retour de données.

                    D'où le console log().

                    Dans le code que je t'ai posté, logiquement tu as un log dans ta console quand tu sélectionne un résultat. Est ce que tu peux me le partager?

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                      29 août 2016 à 9:40:53

                      ci joint la capture . je voudrais juste que mon champs <input type="text" id="fadr1" ... se remplisse quand je met le nom dans : <input type="text" id="fnom" ... 

                      je pensais que c'était plus simple que ça

                      -
                      Edité par Lucafone 29 août 2016 à 9:42:51

                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 août 2016 à 9:49:44

                        Ok, donc il va falloir que tu formattes le retour de tes données un peu différemment avant de les renvoyer.

                        while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
                             // On ajoute les données dans un tableau
                             $suggestions = array(
                                  "nom" => $donnees['nom'],
                                  "adresse" => $donnees['adresse']
                             );
                        }
                          
                             // On renvoie le données au format JSON pour le plugin
                             echo json_encode($suggestions);


                        Et ensuite, quand tu récupères tes données, il faut que tu extraies selon ce que tu veux pour remplir tes champs:

                        $('#fnom').autocomplete({
                                serviceUrl: 'client.php',
                                dataType: 'json',
                                select: function (response){
                                    console.log(response);
                                    $('#idAdresse').val(response.adresse)
                                }
                            });


                        Au passage remets moi le résultat de ton console.log avec le nouveau formatage des données

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                          29 août 2016 à 10:01:26

                          TypeError: b is undefined
                           
                          ...)},verifySuggestionsFormat:function(b){return b.length&&"string"==typeof b[0]?a....
                             
                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 août 2016 à 13:36:37

                            Hum hum... Essaye de faire un var_dump a la place du json_encode pour être sûr que la variable soit bien initialisée
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                              29 août 2016 à 13:54:59

                              je vois bien l'adresse elle est bien récupéré, c'est juste qu'elle se met pas dans l'input de l'adresse

                               
                              200 OK
                                33ms
                              jquery.min.js (ligne 4)
                              {"suggestions":["TESTLUCA77200","21 RUE DU TEST\r\n"]}
                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 août 2016 à 14:00:58

                                Le truc, c'est que là ton adresse n'est pas encapsulée avec un titre. Il faudrait que ton JSON ressemble à ca:

                                {
                                     "suggestions": {
                                          "addresse" : "21 RUE DU TEST",
                                          "nom": "TESTLUCA77200"
                                     }
                                }



                                • Partager sur Facebook
                                • Partager sur Twitter
                                Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                                  29 août 2016 à 14:10:00

                                  avec var_dump

                                  array(2) {  ["nom"]=>  string(9) "TEST LUCA"  ["adresse"]=>  string(16) "21 RUE DU TEST " } 

                                  -
                                  Edité par Lucafone 29 août 2016 à 14:11:10

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    29 août 2016 à 14:14:50

                                    Ok, donc déjà notre variable en PHP est bien renvoyée.

                                    L'erreur vient du fait qu'il n'arrive pas à accéder à response.adresse ici :

                                     $('#idAdresse').val(response.adresse)

                                    Du coup, commente cette ligne pour l'instant et fais lui juste le 

                                    console.log(response);
                                    

                                    Dans ton callback select()

                                    Est ce que le retour des données est bien formatté comme dans le var_dump?

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                                      29 août 2016 à 14:20:45

                                      j'ai commenté la ligne est j'ai le meme résultat.

                                      formaté pareil

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        29 août 2016 à 14:28:21

                                        Lucafone a écrit:

                                        TypeError: b is undefined
                                         
                                        ...)},verifySuggestionsFormat:function(b){return b.length&&"string"==typeof b[0]?a....
                                           

                                        C'est ca que tu entends par "même résultat" ?
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                                          29 août 2016 à 14:32:10

                                          Si je remet le json

                                          j'ai la meme erreur oui.

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            29 août 2016 à 14:37:35

                                            A la place de serviceUrl essaye de mettre url

                                            $('#fnom').autocomplete({
                                                    url: 'client.php',
                                                    dataType: 'json',
                                                    success: function( response ) {
                                            console.log(response);
                                                      }
                                                });


                                            Et essaye le callback success en fait, je viens de m'apercevoir qu'en fait il existe En fait le callback select ne traite pas les retour mais l'objet sélectionné coté client

                                            -
                                            Edité par bryan33000 29 août 2016 à 14:38:03

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                                              29 août 2016 à 14:47:02

                                              J'i ça comme erreur

                                              SyntaxError: missing : after property id

                                               
                                                      url: 'client.php',
                                                 
                                              $(document).ready(function() {
                                              $('#fnom').autocomplete({
                                                      url: 'client.php',
                                                      dataType: 'json',
                                                      success: function( response ) {
                                              		console.log(response);
                                              		$('#fadr1').val(response.adresse)
                                              		          }
                                              		    });
                                              			
                                              		}); 
                                              
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                29 août 2016 à 14:54:15

                                                Et en mettant source à la place d'url ?

                                                $('#fnom').autocomplete({
                                                        source: 'client.php',
                                                        dataType: 'json',
                                                        success: function( response ) {
                                                             console.log(response);
                                                        }
                                                });



                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                                                  29 août 2016 à 15:14:03

                                                  <script language="javascript" type="text/javascript">
                                                  function bbcode(bbdebut, bbfin,element) {
                                                  	//alert("bbdebut = " + bbdebut + " / bbfin = " + " / element = " + element );
                                                  	var instruction = "var input = window.document." + element;
                                                  	//alert(instruction);
                                                  	eval(instruction);
                                                  	input.focus();
                                                  	/* pour IE (toujous un cas appar lui  )*/
                                                  	if(typeof document.selection != 'undefined') {
                                                  		var range = document.selection.createRange();
                                                  		var insText = range.text;
                                                  		range.text = bbdebut + insText + bbfin;
                                                  		range = document.selection.createRange();
                                                  		if (insText.length == 0) {
                                                  			range.move('character', -bbfin.length);
                                                  		}
                                                  		else {
                                                  			range.moveStart('character', bbdebut.length + insText.length + bbfin.length);
                                                  		}
                                                  		range.select();
                                                  	}
                                                  	/* pour les navigateurs plus r�cents que IE comme Firefox... */
                                                  	else if(typeof input.selectionStart != 'undefined')	{
                                                  		var start = input.selectionStart;
                                                  		var end = input.selectionEnd;
                                                  		var insText = input.value.substring(start, end);
                                                  		input.value = input.value.substr(0, start) + bbdebut + insText + bbfin + input.value.substr(end);
                                                  		var pos;
                                                  		if (insText.length == 0) {
                                                  			pos = start + bbdebut.length;
                                                  		}
                                                  		else {
                                                  			pos = start + bbdebut.length + insText.length + bbfin.length;
                                                  		}
                                                  		input.selectionStart = pos;
                                                  		input.selectionEnd = pos;
                                                  	}
                                                  	/* pour les autres navigateurs comme Netscape... */
                                                  	else {
                                                  		var pos;
                                                  		var re = new RegExp('^[0-9]{0,3}$');
                                                  		while(!re.test(pos)) {
                                                  			pos = prompt("insertion (0.." + input.value.length + ";):", "0");
                                                  		}
                                                  		if(pos > input.value.length) {
                                                  			pos = input.value.length;
                                                  		}
                                                  		var insText = prompt("Veuillez taper le texte");
                                                  		input.value = input.value.substr(0, pos) + bbdebut + insText + bbfin + input.value.substr(pos);
                                                  	}
                                                  }
                                                  
                                                  function smilies(img) {
                                                  	window.document.form1.message_news.value += '' + img + '';
                                                  }
                                                  
                                                  </script>

                                                   j'ai ça



                                                  -
                                                  Edité par Lucafone 29 août 2016 à 15:26:40

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    29 août 2016 à 15:27:13

                                                    Essaye de faire une requête ajax que tu stockes dans une variable.

                                                    Et cette variable tu l'appelles dans source

                                                    Essaye de t'inspirer de ca sinon:

                                                    https://jqueryui.com/autocomplete/#categories 

                                                    -
                                                    Edité par bryan33000 29 août 2016 à 15:27:46

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Quand tu ne sais pas, Google reste ton meilleur ami ! ;)
                                                      29 août 2016 à 15:28:52

                                                      moi qui pensai que c'était quelques simples lignes de code :-/

                                                      -
                                                      Edité par Lucafone 29 août 2016 à 16:20:58

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      autocomplete plusieurs champs

                                                      × 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