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

AJAX Discussion :

[AJAX] Autocomplétation Ajax mysql avec plusieurs mots


Sujet :

AJAX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut [AJAX] Autocomplétation Ajax mysql avec plusieurs mots
    Bonjoour,
    j'ai les codes suivants qui fonctionnent bien, mais qui recherhent uniqument sur le premier mot de la base de données :
    Par exemple, si dans ma base j'ai dans la cellule "nom" les mots : jules ferry
    et si je tape 'jules' : ok il me trouve bien "jules ferry" mais si je tape 'ferry' il ne me trouve rien...

    Merci de votre aide.
    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
    27
    28
     
    <script type="text/javascript">
    	function lookup(inputString) {
    		if(inputString.length == 0) { // si le champs txte est vide
    			$('#suggestions').hide(); // on cache les suggestions
    		} else { // sinon
    			$.post("ajax_ev.php", {queryString: ""+inputString+""}, function(data){ 
    			// on envoie la valeur du champ texte dans la variable post queryString au fichier ajax_ev.php
    				if(data.length >0) {
    					$('#suggestions').show(); // si il y a un retour, on affiche la liste
    					$('#autoSuggestionsList').html(data); // et on remplit la liste des données
    				}
    			});
    		}
    	}
    	function fill(thisValue) { // remplir le champ texte si une suggestion est cliquée
    		$('#inputString').val(thisValue);
    		setTimeout("$('#suggestions').hide();", 200);
    	}
    	$(document).ready( function () {
    		$("input#inputString").keyup( function() { // si on presse une touche du clavier en étant dans le champ texte qui a pour id inputString
    			lookup($(this).val()) 
    		});
    		$("input#inputString").blur( function() { // si le champ texte perd le focus
    			fill() 
    		});
    	});
    </script>
    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
    <form method="post" action="recherche_interne.php">
    <fieldset>
    <legend> &nbsp; Recherche par mot clé &nbsp; </legend>
    <label>Entrer le nom de l'artiste ici :</label>
    <input type="text" tabindex ="16" name="recherche" class="ev" value="" id="inputString" /><!--  champ texte à analyser pour les suggestions -->
    <div class="suggestionsBox" id="suggestions" style="display: none;"> <!-- bloc contenant les eventuelles suggestions -->
    <div class="suggestionList" id="autoSuggestionsList"><!-- liste contenant les suggestions -->
    </div>
    </div>
    <br />
    <p><b>ne pas indiquer les pronoms comme "Le" "Les" "The" ..merci.</b></p>
    <br />
    </fieldset>
    <input type="submit" tabindex ="17" value="Rechercher" />
    </form>
    traitement :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
    require("configuration.php");
    $sql = connect_sql();
    mysql_query("SET NAMES utf8");
    // si une variable queryString a été posté
    if(isset($_POST['queryString'])) 
            {
                    // si la longueur du contenu de la variable est superieur à 0
                    $queryString = mysql_real_escape_string($_POST['queryString']);
                    if(strlen($queryString) >0) 
                    {
                            // requete sql à personnaliser pour correspondre à votre base de données
                            $remplacements = array('à' => 'a','é' => 'e','è' => 'e','ù' => 'u','ê' => 'e','ô' => 'o' );
                            $saisie_avant = strtr($queryString, $remplacements);
                            //ayant tout des mots dans leurs informations
                            // fonction pour nettoyer la chaine de caracteres
                            function trimUltime($chaine)
                            {
                                    $chaine = trim($chaine);
                                    $chaine = str_replace("\t", " ", $chaine);
                                    $chaine = eregi_replace("[ ]+", " ", $chaine);
                                    return $chaine;
                            }
                            $saisie = trimUltime($saisie_avant);
                            $mots = explode(' ',$saisie);//sépare l'expression en mots cles
                            foreach($mots as $mot)
                            {
                                    $result = mysql_query("SELECT * FROM evenement WHERE nom LIKE '$mot%' LIMIT 15");
                                    if($result)
                                    {                               
                                            while($nom = mysql_fetch_array($result))
                                            {
                                                    // on affiche les resultats dans un element de liste en ajoutant la fonction fill sur l'evenenement onClick
                                                    echo '<li onClick="fill(\''.$nom["nom"].'\');">'.$nom["nom"].'</li>';
                                            }
                                    }
                                    else
                                    {
                                            echo 'Il y a un probleme avec la requete sql.';         
                                    }
                            }
                    }               
                    else
                    {
                            echo 'Il y a un probleme avec la requete sql.'; 
                    } 
            }
            else 
            {
                    echo 'Il ne devrait pas avoir un accès direct à ce script !!!';       
            }
    ?>

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Bonjour,

    Si tu as la possibilité de le faire et que le moteur utilisé est Innodb, met un index de type fulltext au champs `nom` de la table `evenement` puis tu adapte ta requête pour la recherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM evenement WHERE nom MATCH (nom) AGAINST ('" . $mot . "' IN BOOLEAN MODE) LIMIT 15"
    Sinon il faudra que tu décompose la chaîne de recherche ( avec explode par exemple) et tu rempli ta condition WHERE avec les différents mots de ta chaîne.


    Cordialement,
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  3. #3
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut
    @ Torgar :

    je ne trouve pas ce 'fulltext' à indiquer pour le champ `nom`...

    sinon, je décompose déjà la chaîne de recherche avec explode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $mots = explode(' ',$saisie);//sépare l'expression en mots cles
    			foreach($mots as $mot)
    			{
    mais cela ne fonctionne pas...

  4. #4
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    En effet, j'avais mal regardé le code

    Et si tu rajoute le joker % ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $result = mysql_query("SELECT * FROM evenement WHERE nom LIKE '%$mot%' LIMIT 15");
    je ne trouve pas ce 'fulltext' à indiquer pour le champ `nom`...
    Tu utilise quel moteur de base de données et quel application/interface pour gérer tes bases de données ?
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  5. #5
    Membre éclairé Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 506
    Par défaut
    Torgar,
    j'utilise hélas déjà le joker...

    ma base est en Mysql chez Free et j'utilise Myphpadmin pour l'administrer...

  6. #6
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Pas comme je l'ai mis. Toi tu ne l'as mis qu'à la fin du mot recherché (dans le code de ton premier post), moi j'ai encadré le mot recherché par le joker ( % $mot % ).

    Dans ta requête tu ne cherche que les noms commençant par le mot recherché, or moi, je recherche le mot peu importe sa place dans le champs.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

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

Discussions similaires

  1. [AJAX] Autocomplétation Ajax mysql
    Par fazpedro dans le forum AJAX
    Réponses: 1
    Dernier message: 26/07/2011, 23h19
  2. [AJAX] Suppression données mysql avec checkbox et passant par ajax
    Par MartiW dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/12/2008, 09h56
  3. Requête avec plusieurs mots
    Par zeugzeug dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/05/2007, 14h47
  4. Problème de requête MYSQL avec plusieurs limit
    Par Super_baloo8 dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/05/2007, 18h35
  5. Réponses: 6
    Dernier message: 04/11/2005, 17h09

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