IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

input text avec auto-complétion


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut input text avec auto-complétion
    Bonjour,

    J'ai un site avec un catalogue de référence.
    Je souhaiterai que l'input recherche me donne une liste de références correspondant à ce qui est saisi dans l'input.

    euh... Je sais pas si je suis clair...

    En gros, je commence à écrire dans le champs rechercher : "Z14"
    et J'obtient une liste (qui apparait automatiquement accroché au champs input)
    qui me propose
    "Z140"
    "Z141"
    "Z142"
    "Z143"

    Du même genre que le champs de recherche google...

    Quelqu'un a une solution ?

  2. #2
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Ce n'est pas une solution envisageable en PHP car c'est une langage serveur.
    Il faut te tourner vers du Javascript dont les données de référence seront alimentées par un script PHP.

    Voilà un tutorial : http://dcabasson.developpez.com/arti...ion-pas-a-pas/
    Ou sinon via jQuery UI : http://docs.jquery.com/UI/Autocomplete

  3. #3
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 493
    Par défaut
    merci pour le tuto (moi qui voulait justement me faire une auto-completion)
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut Mes essais pour l'auto-complétion
    Bon, j'avance, petit à petit...

    Voilà là ou j'en suis :
    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
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
     
    <?php 
    	$select_ref="SELECT reference FROM catalogue ORDER BY reference";
    	$result_ref = mysql_query($select_ref) or die ('Erreur SQL : '.mysql_error() );
    	$nbref=mysql_numrows($Rbanniere);
    	$iref=0;
    ?>
    <script>
    	$(document).ready(function() {
            $("input#autocomplete").autocomplete({
    <?php
    	echo 'source: ["';
    	while( $iref<$nbref)
    	{
    	       $ref=mysql_result($select_ref);
                   echo '"'.ref.'",';
    	       $i++;
    	}
    	echo '"]';
    ?>
    	});
    	});
    </script>
    Puis je met à la place de mon input
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input id="autocomplete"/>
    Mon problème, pour le moment, c'est que ça mouline mais n'aboutit jamais...

    Quelqu'un vois quelque chose qui n'irait pas dans ce code?

  5. #5
    Membre Expert
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Temps réel Embarqué

    Informations forums :
    Inscription : Janvier 2011
    Messages : 3 149
    Par défaut
    Tu incrémentes $i et non la bonne variable.

    Cependant pour ce que tu fais pourquoi ne pas utiliser une fonction mysql_ faisant avancer automatiquement le pointeur ?
    mysql_fetch_array()
    mysql_fetch_object()
    mysql_fetch_assoc()

  6. #6
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut
    Comme ceci, ça fonctionne ?

    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
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
     
    <?php 
    $select_ref= "SELECT reference FROM catalogue ORDER BY reference";
    $result_ref = mysql_query($select_ref) or die ('Erreur SQL : '.mysql_error() );
    ?>
     
    <script>
    $(document).ready(function() {
    $("input#autocomplete").autocomplete({
     
    <?php
    echo 'source: ["';
    while($result = mysql_fecth_array($resultref))
    {
    echo '"'.$resultref['reference'].'", ';
    }
    echo '"]';
    ?>
     
    });
    });
    </script>
    [EDIT] Oups en même temps transgohan

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut
    Bon, j'ai réussi un premier essai avec un truc appelé wick.js

    Mais cela ne me convient pas vraiment, parce que l'auto-complétion ne se fait que sur les premiers caractères et non pas au milieu des mots, par exemple...

    De plus, il m'affiche la liste collé au bord droit de la fenêtre et je ne trouve pas comment remettre la liste en dessous de l'input...

    Je suis revenu donc à la première solution qui fonctionne maintenant ^^

    Par contre, faut que je check, les résultats s'affichent sur la page et non pas dans une liste...

    [EDIT]
    J'avais juste oublié le css :
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>

    Bref, merci à tous ^^

    Je remet mon code si ca peut aider certains ^^
    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
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
     
    <?php
    $select_ref="SELECT reference FROM catalogue ORDER BY reference";
    $result_ref = mysql_query($select_ref) or die ('Erreur SQL : '.mysql_error() );
    $nbref=mysql_numrows($result_ref);
    $iref=0;
    ?>
    <script>
    $(document).ready(function() {
    $("input#autocomplete").autocomplete({
    <?php
    echo 'source:[';
    while( $iref<$nbref)
    {
    $ref=mysql_result($result_ref,$iref,"reference");
    echo '"'.$ref.'",';
    $iref++;
    }
    echo '""]';
    ?>
    });
    });
    </script>

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    a quoi sert le $iref ? ainsi que le $nbref
    tu peux direct faire un while sur mysql_result

  9. #9
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 493
    Par défaut
    Citation Envoyé par Taelis Voir le message
    Mais cela ne me convient pas vraiment, parce que l'auto-complétion ne se fait que sur les premiers caractères et non pas au milieu des mots, par exemple...
    c'est le principe de l'auto-completion j'ai envie de dire...
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  10. #10
    Membre chevronné Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Par défaut
    dans la requete il faut que tu mettes

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE reference LIKE 'letextdetoninput%'

    edit: j'ai indiqué le contraire, suis à l'ouest. Dur le réveil...

  11. #11
    Membre émérite Avatar de fallais
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2006
    Messages : 858
    Par défaut
    Bonjour,

    je ne pense que tu ne pourras pas afficher les résultats sur la page (comme Google ?), le script jQuery est conçu comme ça.

    De plus cette méthode n'est pas viable, quand ta base de données sera très grande, tous les résultats seront chargés sur la page (et pour peu que ton inout soit dans le layout principal, à chaque rechargement de page..)

    Peut-être devrais-tu te tourner vers un script AJAX plus complet

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut Dernier point qui ne fonctionne pas comme je veux...
    Bon, voilà, j'ai réussi à tout régler comme il faut, sauf le nombre de proposition affichées...

    Là, ça m'affiche tous les résultats qui contiennent ce que j'ai déjà écrit...

    Ce qui fait que lorsque je tape "1", j'ai environ 10000 résultats qui s'affichent...

    J'aimerai pouvoir limiter l'affichage à quelques lignes (10-15)

    J'ai essayé de limiter ça dans la requête <-- mauvaise idée

    Quelqu'un connaitrait-il assez la librairie pour pouvoir m'aiguiller sur l'option à utiliser?
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("input#autocomplete").setMaximumRowCount(12);
    De même si quelqu'un sait comment changer la couleur, police, surlignage de survol... etc ?

    [EDIT]

    J'ai résolu mon problème en éditant le CSS du jquery-ui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    .ui-autocomplete { 	position: absolute;
    					cursor: default;
    					max-height: 100px;
    					overflow-y: auto;
    					overflow-x: hidden;
    					padding-right: 20px;
    					font-size: 10px;
    				 }
    Je pense qu'on peut également faire ça via une balise <style>

    Merci pour toute l'aide apportée ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Editeur texte avec auto complétion sous Linux
    Par Sield dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/09/2013, 15h23
  2. Donner le focus a un input text avec un radio
    Par hraiwen dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 02/04/2009, 12h02
  3. [JComboBox] avec auto complétion
    Par lastrecrue dans le forum Composants
    Réponses: 1
    Dernier message: 07/05/2008, 07h05
  4. perte de focus lors de la creation d'input text avec innerhtml
    Par arnobidul dans le forum Général JavaScript
    Réponses: 27
    Dernier message: 14/06/2006, 17h49
  5. Form + input text avec espace
    Par psykbe dans le forum Langage
    Réponses: 3
    Dernier message: 23/02/2006, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo