
Recherche à la volée avec Jquery
Posté par : Neg le : 2009-12-09 10:00:31
Wesh wesh yo ! tu sait qu'est-ce-qu'on va faire aujourd'hui ? on va apprendre à coder vite fait un moteur de recherche avec résultats instantanés (en même temps que toi tu frappe ton clavier !).
Pour ça, comme d'habitude (big up à cloclo) on va utiliser la librairie
jQuery.
Voyons plus précisément ce qu'on va mettre en place :
- un champ de recherche,
- un div pour afficher les résultats au fur et à mesure (à chaque relâchement de touche)
- une recherche séparant les mots que l'on tape, pour que les résultats s'affichent même si les mots données ne se suivent pas.
- Pour l'exemple la recherche s'effectuera sur le champ titre des articles de ce blog
-
DEMO ICI (essaye avec "jQuery" par exemple)
On commence par la structure html de la page, trés simple :
<body>
Recherchez dans les titres : <input type="text" id="recherche"> <a href="">revenir à l'article</a>
<div id="suggest">
</div>
</body>
regardons maintenant le "head" de la page, avec notre code javascript :
on appelle jquery
<script type="text/javascript" src="./jquery.js"> </script>
le code jquery
<script type="text/javascript">
$(document).ready(function() {
//à la modification du champs recherche
$("#recherche").keyup(function(){
var req=$(this).attr("value");
//requête ajax, appel du fichier recherche_ajax.php
$.ajax({
type: "GET",
url: "./recherche_ajax.php?req="+req,
dataType : "html",
//affichage de l'erreur en cas de problème
error:function(msg, string){
alert( "Error !: " + string );
},
success:function(data){
//alert(data);
on met à jour le div suggest avec les données reçus
$("#suggest").empty();
$("#suggest").append(data);
}});
});
})
</script>
il nous manque encore le code php contenant la requête sql du fichier recherche_ajax.php appelé par le code javascript. le voici :
//on se connecte à notre base de données
require_once('./connect_bdd.php');
//nom de la table sur laquelle on recherche
$nom_table='article';
//nom du champs sur lequel on effectue la recherche
$nom_champ='article_titre';
//suppression des espaces inutiles
$chaine=trim($_GET["req"]);
//si la recherche n'est pas vide
if($chaine!='')
{
//on sépare les mots
$chaine=explode(' ', $chaine);
$nb=count($chaine);
//si il y'a plusieur mots
$req_sup='';
if($nb>1)
{
//pour chaque mot sauf le premier
for($i=1;$i<$nb;$i++)
{
$chaine[$i]=trim($chaine[$i]);
//si la chaine n'est pas vide
if($chaine[$i]!='')
{
on forme la requête
$req_sup.=" AND (".$nom_champ." LIKE '%".$chaine[$i]."%') ";
}
}
}
//on fait la recherche, qui prend par defaut le premier mot, + les autre qu'on vient de traiter
$query ="
SELECT article_id, article_titre FROM ".$nom_table."
WHERE (".$nom_champ." LIKE '%".$chaine[0]."%')
".$req_sup."
ORDER BY ".$nom_champ." LIMIT 20";
$rs = mysql_query($query);
//pour chaque résultat
while(list($id, $titre)=mysql_fetch_row($rs))
{
//on renvoit le lien
echo '<a href="../chezneg-leblog.php?id_art='.$id.'">'.$titre.'</a><br />';
}
}
else
{
//on renvois du vide
echo '';
}
ce sera tout les boloss :)
J'aime, 17 personnes aiment çaCommentaire(s)(3)