Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > AJAX
AJAX Forum sur la programmation AJAX. Avant de poster : Cours AJAX, FAQ AJAX, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/09/2011, 11h44   #1
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Par défaut 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 :
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 :
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 :
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 !!!';	
	}
?>
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 12h58   #2
Membre expérimenté
 
Avatar de Torgar
 
Homme Jérémy
Développeur Web
Inscription : août 2007
Messages : 326
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 326
Points : 535
Points : 535
Envoyer un message via MSN à Torgar Envoyer un message via Skype™ à Torgar
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 :
$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,
__________________
Vivez vos rêves !!!

Si vous voulez que l'on vous aide, postez votre code avec la balise [ CODE ] [ /CODE ] (bouton # de l'éditeur)
Torgar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 13h33   #3
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
@ 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 :
1
2
3
$mots = explode(' ',$saisie);//sépare l'expression en mots cles
			foreach($mots as $mot)
			{
mais cela ne fonctionne pas...
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 14h52   #4
Membre expérimenté
 
Avatar de Torgar
 
Homme Jérémy
Développeur Web
Inscription : août 2007
Messages : 326
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 326
Points : 535
Points : 535
Envoyer un message via MSN à Torgar Envoyer un message via Skype™ à Torgar
En effet, j'avais mal regardé le code

Et si tu rajoute le joker % ? :
Code :
$result = mysql_query("SELECT * FROM evenement WHERE nom LIKE '%$mot%' LIMIT 15");
Citation:
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 ?
__________________
Vivez vos rêves !!!

Si vous voulez que l'on vous aide, postez votre code avec la balise [ CODE ] [ /CODE ] (bouton # de l'éditeur)
Torgar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 15h59   #5
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Torgar,
j'utilise hélas déjà le joker...

ma base est en Mysql chez Free et j'utilise Myphpadmin pour l'administrer...
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 16h04   #6
Membre expérimenté
 
Avatar de Torgar
 
Homme Jérémy
Développeur Web
Inscription : août 2007
Messages : 326
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 326
Points : 535
Points : 535
Envoyer un message via MSN à Torgar Envoyer un message via Skype™ à Torgar
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.
__________________
Vivez vos rêves !!!

Si vous voulez que l'on vous aide, postez votre code avec la balise [ CODE ] [ /CODE ] (bouton # de l'éditeur)
Torgar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 20h55   #7
Membre du Club
 
Avatar de fazpedro
 
Homme
Inscription : août 2009
Messages : 360
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2009
Messages : 360
Points : 64
Points : 64
Oui, effectivement, c'est une faute de débutant !

j'avais mis $mot% au lieu de %$mot% !

Merci beaucoup Torgar, cela fonctionne à merveille !
fazpedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 09h31   #8
Membre expérimenté
 
Avatar de Torgar
 
Homme Jérémy
Développeur Web
Inscription : août 2007
Messages : 326
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 326
Points : 535
Points : 535
Envoyer un message via MSN à Torgar Envoyer un message via Skype™ à Torgar
Avec plaisir. Content que ça fonctionne.
__________________
Vivez vos rêves !!!

Si vous voulez que l'on vous aide, postez votre code avec la balise [ CODE ] [ /CODE ] (bouton # de l'éditeur)
Torgar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h13.


 
 
 
 
Partenaires

Hébergement Web