Fonction recherche avec des mots-clés.
Bonjour
J'aimerais faire un module de recherche par mots-clés, mais si je fais :
mysql_query("SELECT * FROM messages WHERE message='".$_POST['mot_cles']."'") or die (mysql_error());
Le message doit être parfaitement égal et ça pose porblème.
Comment faire ?
++
le 31/10/2005 à 11:26
Bzh
il faut que tu utilise la fonction explode puis implode !!!!
Tu récupères la valeur entrée par le formulaire exemple:
puis tu le transforme en un tableau contenant tous les mots clées :
<?php $mots_cles = exmplode(" ",$_POST['formulaire']; ?>
ce qui te donneras dans ce cas là un tableau contenant trois valeurs => php,forum,code
Maintenant, il faut construire notre requette:
<?php
$bout_requette = implode("% or message LIKE %",$mots_cles);
requette = "SELECT * FROM messages WHERE message LIKE %$bout_requette";
?>
La syntaxe n' est surement pas bonne. Je n' ai pas vérifié le code. C' est juste pour la logique et pour te montrer comment on doit s' y prendre...
Mais il doit y avoir des erreurs dans la syntaxe. Je ne l' ai pas essayé...
Bon courage...
Ca marche pas :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%BBCode' at line 1
le 31/10/2005 à 11:56
Bzh
Je te l' ai dis !!!!!!! Pas de copié-collé !!!! Il faut que tu comprennes le sens ....
Bon, pour commencer, il faut que tu affiches la requette pour voir ou se trouve l' erreur...
Bon, essaye ça =>
<?php
$bout_requette = implode("%' or message LIKE '%",$mots_cles);
requette = "SELECT * FROM messages WHERE message LIKE '%$bout_requette%'";
?>
Mais, le copié-collé n' est pas la meilleur des solutions...
Plus d'erreur mais : Votre recherche n'a donée aucun resultat.
<?php
/*
* - Script : Le forum
* - Version : 1.1
* - Date : 20 juillet 2005
* - Fichier : search.php
*/
/* Fichier de configuration */
require('config.inc.php');
/* Haut du forum */
include('haut.php');
/* Vérification du formulaire */
if (isset($_POST['mot_cles']) && isset($_POST['utilisateur']))
{
if ($_POST['mot_cles'] != NULL && $_POST['utilisateur'] == NULL)
{
mysql_connect($host, $login, $password); // Connexion à MySQL
mysql_select_db($base);
$mots_cles = explode(" ",$_POST['mot_cles']);
$bout_requette = implode("%' or message LIKE '%",$mots_cles);
mysql_query("SELECT * FROM messages WHERE message LIKE '%$bout_requette%'");
//mysql_query("SELECT * FROM messages WHERE message='".$_POST['mot_cles']."'") or die (mysql_error());
$donnees = mysql_fetch_array($reponse);
if ($donnees[0] == 1)
{
$donnees['titre'];
}
else
{
$erreur = "Votre recherche n'a donnée aucun resultat.";
}
}
}
?>
<form action="search.php" method="POST">
Mot clés :<input type="text" name="mot_cles" />
Pseudo : <input type="text" name="utilisateur" />
<input type="submit" value="Ok" />
<?
if (isset($erreur))
{
echo $erreur;
}
?>
</form>
<?
echo '';
/* Bas du forum */
include('bas.php');
?>
A éviter les LIKE pour les moteurs de recherche.
Il existe d'autres techniques nettement plus performantes et donnant de meilleurs résultats (les index fulltext par exemple).
Sinon, pour ton erreur, je te dirais que $reponse n'existe pas dans ton code.
Et de plus; l'index 0 de ton tableau ne contient pas le nombre de réponse de la requete.
C'est quoi les index fulltext ?
PS : J'ai recherché et j'ai rien trouvé sur le site.
lien
Tu as mal recherché.
le 31/10/2005 à 12:29
Bzh
Pkoi à éviter les LIKE La Globule ???
Ben parce que c'est pas fait pour faire un moteur de recherche.
Fais des bench, tu verras.