Moteur de recherche

Eléphanteau du PHP | 21 Messages

01 mai 2008, 16:02

Bonjour !

J'ai un soucis avec mon moteur de recherche. J'ai crée un champ dans ma bdd qui recueille les mots clés d'articles que j'écris. Je voudrais que grâce au moteur de recherche, les visiteurs du site puissent retrouver un article les intéressant en faisant un tri par mot clé.
Le probleme c'est que si la personne rentre plusieurs mots clés, il n'obtiendra aucun résultat. Pour être claire, je voudrais que la recherche puisse se faire en multicritère.

Ex : un fichier avec mots clé "livre, aventure, fantasy" et un autre avec "aventure, urbain"
Si un visiteur fait une recherche avec les mots clé "aventure, fantasy", il ne devra trouver que le premier article.

Merci de votre aide :D

Mon code :
<form method="post" action="recherche.php#nav">
        <p><input type="text" name="mot_cle"/></p>
        <input type="submit" value="Rechercher"/>
		</form>
		
			
		<?php if (isset($_POST['mot_cle']) AND !empty($_POST['mot_cle']))
			{
		$mot_cle = mysql_real_escape_string(htmlspecialchars($_POST['mot_cle'], ENT_QUOTES));
    	
		$retour = mysql_query("SELECT * FROM livres WHERE mot_cle LIKE '%$mot_cle%'") or die("Erreur MySQL : " . mysql_error('erreur sql'));

Mammouth du PHP | 1668 Messages

01 mai 2008, 16:58

pourquoi ne remplace tu pas les virgules, point-virgules et les espaces par %

:roll:
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphanteau du PHP | 21 Messages

01 mai 2008, 18:03

Je ne comprends pas. Quelles virgules et espaces je dois remplacer ?

Mammouth du PHP | 1668 Messages

01 mai 2008, 18:38

les virgules, les espaces et les points virgules qui sont dans la requête du client...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

Eléphant du PHP | 422 Messages

01 mai 2008, 19:39

Non mauvaise solution. parce que si tu fais une recherche sur "%aventure%fantasy%" et que l'article est indexé dans la base par "fantasy, aventure", ça ne donnera rien.

Une première solution consiste à éclater les mots clés et à construire dynamiquement la clause where de recherche avec des suites de like.

Code : Tout sélectionner

where (motcle like '%aventure%' and motcle like '%fantasy%' and motcle like '%autre%')
Une deuxième solution (plus simple) consiste à regarder les fonctions fulltext de MySQL
http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

Eléphanteau du PHP | 21 Messages

01 mai 2008, 20:49

Merci pour vos conseils :D
En ce qui concerne la fonction fulltext, c'est ce que j'ai utilisé au départ mais la recherche renvoie tous les articles contenant au moins un des mots de la recherche. Elle ne combine pas les différents mots clés.
$retour = mysql_query("SELECT * FROM livres WHERE MATCH(mot_cle) AGAINST('$mot_cle')") or die("Erreur MySQL : " . mysql_error('erreur sql'));
En ce qui concerne l'éclatement, si j'ai bien compris, il faut que je fasse un champ de formulaire par mot clé ?