Probleme avec recherche de plusieurs mots-clés

cyse Messages postés 18 Date d'inscription mardi 19 octobre 2004 Statut Membre Dernière intervention 10 décembre 2008 - 3 déc. 2007 à 18:47
eso_1er Messages postés 1 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 2 mars 2008 - 2 mars 2008 à 10:58
Bonsoir,

J'essai de faire un moteur de recherche en interne pour un site.
Je ne suis pas super doué en php encore et je n'arrive pas à cerner quelquechose.
J'ai reussi à partir de différentes sources et modifié à ma guise à faire des recherches depuis une base, affiché les resultats, compter le nombre de caractères dans le ou les mots clés mais par contre je n'arrive pas à faire une recherche propre sur plusieurs mots.

Par exemple, si je cherche le mot-clé "voiture" j'ai tout ce qui contient voiture. mais si je recherche "voiture de location", ca recherche et affiche tout ce qui concerne "voiture", "de" et "location" ! Et non la phrase entière !

Avez-vous une solution ?

Merci par avance.

   <form method=\"post\" action=\"recherche.php\">
      ,
      ,
   </form>

<?
//connexion a la base
require 'connect.inc.php';

//recup du resultat formulaire
if(isset($_POST['search']))      $search=$_POST['search'];
else      $search="";

//variable pour la longueur de la recherche
$len_search=strlen($search);

// si la recherche est vide on abandonne la requete
if(empty($search))
    {
    echo 'tapez une recherche';
    exit();
    }
    
// si la recherche est inferieur a x on abandonne la recherche    
if($len_search<3)
    {
    echo 'recherche inferieur a 3';
    exit();
    }

// si les conditions sont remplies on execute la requete
    else     
    {
$Recherche= strtolower($search);
$MaTable="blagues";
$Requete="SELECT * FROM $MaTable WHERE ";
$MotClef = explode(" ", $Recherche);
$NbMotClef = count($MotClef);
$Requete.= "(";
$RequeteTri=mysql_query("SHOW COLUMNS From $MaTable");
$I="0";
while ($Row = mysql_fetch_array($RequeteTri))
{
$Type = eregi_replace("[^a-z]", "", $Row['Type']);
$I2="0";
    if((($Type=="varchar")||($Type=="text")||($Type=="date")))
    {
    if($I!="0") { $Requete.= " OR "; }
    reset($MotClef);
    foreach($MotClef as $V)
        {
        $I2++;
        $Requete.= $Row['Field'] . " LIKE '%$V%'";
        if($I2!=$NbMotClef) { $Requete.= " OR "; }
        }
    $I++;
    }
}
mysql_free_result($RequeteTri);

$Requete.= ")";

$req = mysql_query($Requete) or die('Erreur SQL !
'.$Requete.'
'.mysql_error());
echo 'recherche de '.$search.'';
$count = mysql_num_rows($req);
echo 'il y a '.$count.' resultat(s)';
while ($data = mysql_fetch_array($req)) {
echo nl2br(''.$data['joke'].'
');
}

}
?>

2 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
3 déc. 2007 à 23:00
0
eso_1er Messages postés 1 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 2 mars 2008
2 mars 2008 à 10:58
merci !

$querybase

= mysql_query
( "SELECT * FROM base WHERE MATCH(option3_contenu,option4_contenu,option5_contenu) AGAINST ('%
$q%' IN BOOLEAN MODE) AND pseudo_hpcontenu ="$compte"");

ça marche super.
0
Rejoignez-nous