Fonction recherche avec des mots-clés.

Répondre
PHPDebutant
le 31/10/2005 à 11:05
PHPDebutant
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 ?
++
Bzh
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:

php forum code


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...
PHPDebutant
le 31/10/2005 à 11:49
PHPDebutant
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
Bzh
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...
PHPDebutant
le 31/10/2005 à 11:59
PHPDebutant
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');
?>
LA GLOBULE
le 31/10/2005 à 12:00
LA GLOBULE
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.
PHPDebutant
le 31/10/2005 à 12:02
PHPDebutant
C'est quoi les index fulltext ?
PS : J'ai recherché et j'ai rien trouvé sur le site.
LA GLOBULE
le 31/10/2005 à 12:36
LA GLOBULE
Ben parce que c'est pas fait pour faire un moteur de recherche.

Fais des bench, tu verras.
Répondre
LoadingChargement en cours