begin process at 2012 05 31 16:43:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

recherche avec plusieurs mots dans mon moteur de recherche


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

recherche avec plusieurs mots dans mon moteur de recherche

dimanche 24 mai 2009 à 23:41:17 | recherche avec plusieurs mots dans mon moteur de recherche

hadjiphp

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.


Cette discussion est classée dans : recherche, mots, echo, somme, resultats


Répondre à ce message

Sujets en rapport avec ce message

Moteur de recherche [ par hadjiphp ] Bonjour, j'ai une question : j'ai un code php qui permet de faire un recherche dans la base de donnée (un moteur de recherche) voici le code php : recherche sur un serveur ldap : probleme [ par bullrot1985 ] Bonjour a tous.J'ai un soucis au niveau de ma requete php sur mon serveur ldap.Je vous poste une photo de mon active directory et de mon script...j'ai Problèmes de REGEX [ par bobino75 ] Bonjour à vous, Je commence à travailler avec les REGEX et je me retrouve avec quelques problèmes. Je fais une recherche dans une base de données av Recherche par mots clés mais en gardant l'ordre spécifié. [ par bobino75 ] Bonjour, Je me cherche une manière de faire une recherche par mots clés mais en gardant l'ordre spécifié. La personne peut faire une recherche pou $_GET['valeur'] [ par VestaX ] Salut, Voilà, j'ai un tit soucis avec un moteur de recherche multi-critères. C'est un moteur de recherche pour agence immobilière, et je dois pouvoi 2 problèmes que je ne comprend pas ! [ par squallio ] Bonjour. Je me permet de venir poster un message ici dans le but de trouvées une ou plusieurs réponse si possible. Je suis entrain de créer un site ( moteur de recherche [ par ERDOGANAK ] Bonjour dans le cadre de mon stage d'étè je développe un outil de collaboration en xhtml/php/css couplé a une base de donné où des fichiers seront mis probleme de moteur de recherche en php [ par elksibi ] Bonjour,Est ce que vous pouver m'aider a faire un moteur de recherche interne qui cherche un ou plusueurs mots dans toutes mes tables de la base pour moteur de recherche en php [ par elksibi ] Bonjour,Est ce que vous pouver m'aider a faire un moteur de recherche interne qui cherche un ou plusueurs mots dans toutes mes tables de la base pour recherche inerne par mots clé [ par jeuxfree ] bonjour je suis novice et je cherche a installer un moteur de recherche interne car je propose des jaquettes et j'aimerais que les internautes les tro


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,889 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales