Recherche de plusieurs mots dans le moteur

Fermé
hadjir Messages postés 107 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 7 janvier 2010 - 24 mai 2009 à 23:36
Bonjour,
j'ai une question :
j'ai un code qui permet de faire un moteur de recherche
ma question est la suivante : quand je fait un recherche avec une chaine (suite de mots) elle affiche tous ce sue trouve dans la base aussi dans le cas au cette mot ne ce trouve pas dans tel document
donc j'arrive pas a faire un recherche avec une chaine.

voila le code :
<?php
mysql_connect( "localhost", "root", "" ) ; //connexion à la bdd
mysql_select_db("INFOS") ;
if (isset($_POST['rechercher'])) //si on a validé le formulaire
{
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
$mode = mysql_real_escape_string(htmlspecialchars($_POST['mode']));

if ($mode == "tous_les_mots")
{
$and_ou_or = 'AND'; //on utilisera AND dans la boucle
}
else
{
$and_ou_or = 'OR'; //on utilisera OR dans la boucle
}
if ($mode == "expression_exacte") //si le mode de recherche est par expression exacte
{
$selection_recherche = mysql_query("SELECT terme,url,url FROM document,terme WHERE document.code_doc=terme.code_doc AND terme LIKE '%$recherche%' ");
}
else //si le mode de recherche n'est pas par expression exacte
{
$aTab = preg_split('`[\s| : \ , \ ; \ . \ « \ » \%\@\<\>\;\-\ )  \  +  \ ]+`', $recherche);//caractéres spécieux keyword
$champs1=implode(" ",$aTab); //keyword
	  echo ("$champs1"); print"<br><br>";
	
$motsExclus = array('a','afin','ai','ainsi','ais',"j'","l'","t'");

if( preg_match_all('`\w{2,}`', $champs1, $result) )
{
   // Remplacement des mots exclus par rien
   $result[0] = preg_replace('`\b(' . implode($motsExclus, '|') . ')\b`i', '', $result[0]);
   // Suppression des éléments vides avec array_filter()
   $result[0] = array_filter($result[0]);
}
$champs11=implode(" ", $result[0]);
	  echo ("$champs11"); print"<br><br>";

$mots = explode(" ", $champs11); //séparation des mots reprtésentation sous forme d'un tableau

$nombre_mots = count ($mots); //compte le nombre de mots
$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
{
$valeur_requete .= '' . $and_ou_or . ' terme LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
}
$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
$selection_recherche = mysql_query("SELECT url,titre,terme,poids
         FROM document,terme
         WHERE document.code_doc=terme.code_doc AND $valeur_requete "); //requête avec le résultat de la boucle dedans
		  
      }

     $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
     if ($nombre_resultats == 0) //s'il n'y a pas de résultat
        {
          echo '</br>aucun resultat.<a href="recherche.php">recommencer</a>';
        }
    else //il y a au moins un résultat
       {
         echo '</br>nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
		    $somme = array();
            $somme2 = array();
         while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
              {
			  
			    if(!array_key_exists($resultats["url"], $somme))
                $somme[$resultats["url"]] = 0;
                $somme[$resultats["url"]] +=  $resultats["poids"] * $resultats["poids"];

                if(!array_key_exists($resultats["url"], $somme2))
                $somme2[$resultats["url"]] = 0;
                $somme2[$resultats["url"]] +=  $resultats["poids"] * $resultats["poids"];

              }
      arsort($somme);
	foreach ($somme as $url => $poids) 
		 {
		   $somme_carre=$somme2[$url];
		   $racine_sommecarre=sqrt($somme2[$url]);
		   $somme_mot=sqrt($nombre_mots);
		   $rsv=$poids/($somme_mot*$racine_sommecarre);

           echo "$url : <br>\n";
		   echo "titre :  ";
           echo "Somme des poids : $poids<br>\n";
           echo "Somme des carrés : " .$somme_carre. "<br>\n";
           echo "Racine de la somme des carrés : " .$racine_sommecarre . "<br>\n";
	       echo "Somme des mot rentrer par l'utilisateur : " .$somme_mot . "<br>\n";
	       echo ("RSV : $rsv<br>\n");
       }
       }
}
else //si on n'a pas validé le formulaire, on l'affiche
{
?>
<form method="post" action="recherche.php">
Votre recherche :
<input type="text" name="recherche" />
<br />
Votre mode de recherche :
<select name="mode" style="display:none ">
<option value="expression_exacte">Expression exacte</option>
<option value="tous_les_mots">Tous les mots</option>
<option value="un_mot" selected>Au moins un mot</option>
</select>

<input type="submit" value="Rechercher" name="rechercher" />
</form>
<?php
}
mysql_close(); //déconnexion de la bdd
?>



svp a ce qu'il ya qlq peut me répondre.
merci d'avance.