Moteur de recherche

Fermé
hadjir Messages postés 107 Date d'inscription samedi 3 janvier 2009 Statut Membre Dernière intervention 7 janvier 2010 - 5 mai 2009 à 21:23
Ki!l Messages postés 94 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 4 mars 2011 - 5 mai 2009 à 22:14
Bonjour,
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 :

<?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 (isset($_POST['sujets_fermes'])) //si on a coché la case
{
$sujets_fermes = "AND ferme='1'";
}
else //si on ne l'a pas cochée
{
$sujets_fermes = '';
}
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 url,titre,terme,occure FROM result WHERE terme LIKE '%$recherche%' $sujets_fermes");
}
else //si le mode de recherche n'est pas par expression exacte
{
$aTab = preg_split('`[\s| : \ , \ ; \ . \ « \ » \%\&\0\1\2\3\4\5\6\7\7\8\9\=\*\@\<\>\;\-\ " \ \ \ / \ { \ } \ - \ # \ < \ > \  _ (  \
	                        )  \  +  \  -\[\]\=\?\!\^\`\¿\_\{\}\|\~\&#8364;\&#8218;\&#402;\&#8222;\&#8230;\&#8224;\&#8225;\&#710;\&#8240;\&#352;\&#8249;\&#338;\&#381;\&#8216;\&#8217;\&#8220;\&#8221;\&#8226;\&#8211;\&#8212;	\&#732;\&#8482;\&#353;\&#8250;\&#339;\&#382;\¨\µ\¬\$\©\@\§\ \ ]+`', $recherche);//caractéres spécieux keyword
$champs1=implode(" ",$aTab); //keyword
	  echo ("$champs1"); print"<br><br>";
	
$motsExclus = array('a','afin','ai','ainsi','ais','ait','alors','après','as','assez','au','aucun','aucune','auprès','auquel','auxquelles',
	                      'auwquels','auraient','aurais','aurait','aurez','auriez','aurions','aurons','auront','aussi','aussitôt','autant','autre',
						  'autres','aux','avaient','avais','avait','avant','avez','aviez','avoir','avons','ayant','beaucoup','car','ce','ceci','cela',
						  'celle','celles','celui','cependant','certes','ces','cet','cette','ceux','chacun','chacune','chaque','chez','cinq','comme',
						  'comment','dans','de','dehors','delà','depuis','des','dessous','dessus','deux','deçà','dix','doit','donc','dont','du','durant',
						  'duquel','dès','déjà','elle','elles','en','encore','enfin','entre','er','est','est-ce','et','etc','eu','eux','eurent','eut','faut',
						  'fur','furent','grâce','hormis','hors','huit','ici','il','ils','je','la','laquels','le','les','lesquels','leur','leurs','lors',
						  'lorsque','lui','là','mais','malgré','me','melle','mes','mien','mienne','miennes','miens','mm','mme','moi','moins','moment','mon',
						  'mr','même','neuf','ni','non-','non','nos','notamment','notre','nôtres','nous','néanmoins','on','ont','ou','oui','où','par','parce',
						  'parfois','parmi','partout','pas','pendant','peu','peut','peut-être','plus','plutôt','pour','pourquoi','près','puis','puisque','quand',
						  'quant','quatre','que','quel','quelle','quelles','quelque','quelquefois','quelques','quels','qui','quoi','quot','sa','sans','sauf','se',
						  'selon','sept','sera','seraient','serai','seraient','serais','serait','seras','serez','seriez','serions','serons','ses','si','sien',
						  'siennes','siens','sitôt','six','soi','soit','sommes','son','sont','sous','souvent','suis','sur','tandis','tant','tes','tienne','tiennes',
						  'tiens','toi','ton','toujours','tous','tout','toute','toutefois','toutes','tois','trop','très','tu','un','une','unes','uns','voici','vos',
						  'votre','vous','vôtres','y','à','ème','ére','étaient','étais','était','étant','étiez','étions','êtes','être','été',"d'","s'","c'","m'","n'",
						  "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,occure
FROM result
WHERE $valeur_requete $sujets_fermes"); //requête avec le résultat de la boucle dedans
}

$nombre_resultats1 = mysql_fetch_array($selection_recherche);

$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 'aucun resultat.<a href="recherche.php">recommencer</a>';
}
else //il y a au moins un résultat
{
echo 'nombre de résultats: ' . $nombre_resultats . ':<br /><br />'; //nombre de résultats
while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
{
echo '<strong>Terme:</strong> ' . $resultats['terme'] . '<br />
<strong>URL:</strong> ' . $resultats['url'] . '<br />
<strong>OCCURENCE:</strong> ' . $resultats['occure'] . '<br />
<strong>Titre:</strong> ' . $resultats['titre'] . '<br /><br />';
}
echo '<a href="recherche.php">recommencer</a>';
}
}
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">
<option value="expression_exacte">Expression exacte</option>
<option value="tous_les_mots">Tous les mots</option>
<option value="un_mot">Au moins un mot</option>
</select>
<br />
Sélectionner uniquement les sujets fermés :
<input name="sujets_fermes" type="checkbox" />
<br />
<input type="submit" value="Rechercher" name="rechercher" />
</form>
<?php
}
mysql_close(); //déconnexion de la bdd
?>




ma question et quand je fait ma recherche, si le nombre de resultat par exemple est 16 elle affiche :
nombre de résultats: 16
mais elle affiche seulement 15 resultat (Terme: alger
URL:
OCCURENCE:
Titre: )


c_à-d a chaque recherche elle affiche "nombre de résultats: n"
mais affiche seulement n-1 recultat.

svp de me répondre.
merci d'avance.
A voir également:

1 réponse

Ki!l Messages postés 94 Date d'inscription vendredi 1 mai 2009 Statut Membre Dernière intervention 4 mars 2011 36
5 mai 2009 à 22:14
il faut vérifier les boucles d'affichage
0