Partage
  • Partager sur Facebook
  • Partager sur Twitter

[AJAX] Préremplir un input en tapant les 1er caractères

Sujet résolu
    17 décembre 2010 à 2:50:46

    Bonjour,

    Je cherche à remplir un champ input automatiquement lorsque l'utilisateur tape un mot dans le champ. L'idée est qu'il pré-remplisse avec le premier mot de la bdd qu'il rencontre et qui commence par le mot qu'il a commencé à taper, ou mieux, qu'il présente une liste comme c'est le cas lorsqu on envoie un MP sur le siteduzero.

    exemple: si il tape
    car, cela écrira carol
    caroli écrira caroline
    carolina écrira carolina.

    pour cela je dispose du champ dans la page:

    <input value="" name="pseudo_conversant" id="pseudo_conversant" type="text" onclick="request(readData);"/>
    


    de la fonction, à l'url fonctions_ajax.php:

    <script type="text/javascript">
    <!-- 
    function request(callback) {
    	var xhr = getXMLHttpRequest();
    	
    	xhr.onreadystatechange = function() {
    		if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
    			callback(xhr.responseText);
    		}
    	};
    
    	var pseudo_conversant = encodeURIComponent(document.getElementById("pseudo_conversant").value);
    	
    	xhr.open("GET", "XMLHttpRequest_getString.php?donnees_d_entree=" + pseudo_conversant , true);
    	xhr.send(null);
    }
    
    function readData(sData) {
    	alert(sData);
    }
    //-->
    </script>
    



    et de la page de traitement de la requete XMLHhttpRequest_getString.php


    <?php 
    
    header("Content-Type: text/plain");
    $donnees_d_entree = (isset($_GET["donnees_d_entree"])) ? $_GET["donnees_d_entree"] : NULL;
    if ($donnees_d_entree) {
    	include("fonction.php");
    	$bdd = connexion_bdd();	
    
    	$reponse = $bdd->prepare('SELECT pseudo FROM utilisateur WHERE pseudo LIKE \'?%\'');	
    	$reponse->bindValue('1', $_GET["donnees_d_entree"], PDO::PARAM_STR);
    	$reponse->execute();
    	$donnees = $reponse->fetch();	
    	$reponse->closeCursor();
    	echo $donnees['pseudo'];
    } 
    else {
    	echo "FAIL";
    }
    ?>
    


    Ce code ne marche pas.

    J'ai déjà 2/3 questions...

    1)cette syntaxe est-elle bonne?
    prepare('SELECT pseudo FROM utilisateur WHERE pseudo LIKE \'?%\'');

    2)Que j'utilise onfocus, onchange, ... le script ne se lance pas lorsque que l'on frappe une nouvelle lettre. Que dois-je utiliser?

    3)Je ne sais pas comment avancer pour aboutir... :(

    Merci de votre aide !
    • Partager sur Facebook
    • Partager sur Twitter
      17 décembre 2010 à 9:01:28

      ta requette me semble correcte;

      pour l'event js, utilise onkeyup
      • Partager sur Facebook
      • Partager sur Twitter
        17 décembre 2010 à 9:31:56

        bonjour,
        outre la réponse précédente.
        Rien ne garantira que tu auras le résultat attendu puisque ton SELECT renvoie plusieurs résultats et que tu "fetches" le premier (si les données ont été entrées dans cet ordre-ci : carolina, car, caroli). Il faut ajouter une clause ORDER BY (Sauf si ta colonne pseudo est indexée).

        Au passage je trouve que cette écriture-ci est plus facile à écrire et plus lisible. Pas d'échappement nécessaire. Mais c'est un détail.
        <?php
        $reponse = $bdd->prepare("SELECT pseudo FROM utilisateur WHERE pseudo LIKE '?%'");	
        ?>
        
        • Partager sur Facebook
        • Partager sur Twitter

        [AJAX] Préremplir un input en tapant les 1er caractères

        × 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