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 à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Points : 11
    Points
    11
    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
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    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 146
    Points : 9 386
    Points
    9 386
    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
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 467
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 467
    Points : 4 656
    Points
    4 656
    Par défaut
    merci pour le tuto (moi qui voulait justement me faire une auto-completion)

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Points : 11
    Points
    11
    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
    Expert éminent
    Avatar de transgohan
    Homme Profil pro
    Développeur Temps réel Embarqué
    Inscrit en
    Janvier 2011
    Messages
    3 146
    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 146
    Points : 9 386
    Points
    9 386
    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 éclairé 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
    Points : 783
    Points
    783
    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 à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Points : 11
    Points
    11
    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 éminent sénior

    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
    Points : 10 726
    Points
    10 726
    Par défaut
    a quoi sert le $iref ? ainsi que le $nbref
    tu peux direct faire un while sur mysql_result

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 467
    Points : 4 656
    Points
    4 656
    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...

  10. #10
    Membre confirmé 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
    Points : 540
    Points
    540
    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 éclairé 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
    Points : 783
    Points
    783
    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 à l'essai
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Points : 11
    Points
    11
    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