[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:
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> Recherche par mot clé </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 !!!';
}
?> |