Numérotation des résultats de recherche avec php+mysql+trucs

Contenu du snippet

Imaginant qu'on a réalisé une base de données avec une table contenant des informations mises à la disposition des visiteurs pour y rechercher des articles (sorte d'un petit annuaire),on cherche maintenant à savoir le nombre de résultats trouvés mais le plus important c'est de les numéroter respectivement.

- On crée la table par exemple `annuaire` qui contient les champs `id` `date` `produit` `société` `description` `prix` `url` et `keywords` ce dernier contient les mots clefs
- On crée ensuite une page "search.htm" contenant un formulaire de recherche dont le champ de saisie des mots clefs est "recherche", voici le code HTML de cette page:

<html>
<head>
<title>Recherche</title>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<p> </p>
<p> </p>
<p> </p>
<form name="form1" method="post" action="searching.php">
<p align="center"><font face="Verdana"><span style="font-size:9pt;"><b>Recherche
dans notre base</b></span></font></p>
<p align="left" style="line-height:100%; margin-top:0; margin-bottom:0;"><font face="Verdana"><span style="font-size:8pt;">                            Entrez
un mot clef</span></font></p>
<p align="center" style="line-height:100%; margin-top:0; margin-bottom:0;">
<input type="text" name="recherche" size="30">
<input type="submit" name="submit" value="Rechercher"></p>
</form>
</body>
</html>

Source / Exemple :


<? php
//LA PAGE PHP searching.php 
//BON, LE DEBUT EST CONNU:
include('votre fichier de configuration.inc.php')

//OU DIRECTEMENT
$mysql_host = 'localhost'; // entrer votre hote ici
$mysql_user = 'root'; // entrer votre login
$mysql_password = ''; // entrer votre password
$mysql_base = 'mabase'; // entrer le nom de votre base
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");
mysql_select_db($mysql_base,$db) or die ("erreur de connexion base"); 

// Vérification du champ de formulaire de recherche (s'il est vide)
if(empty($recherche))
{
echo"<p align=center><font color=red face=Verdana size=2>Vous devez saisir un mot clé
pour effectuer une recherche";
include('search.htm');
exit;
}

// CE QUI SUIT C'EST POUR AFFICHER TOUT GENRE DE CARACTERES ET ENLEVER LES SALASHES DEVANT 
// LES APOSRTROPHES

// $recherche c'est la variable du champ de saisie de formulaire de recherche dans la page //search.htm et qui va revenir à chaque fois que la page search.htm revient par include
$recherche = Stripslashes($recherche);
$produit = Stripslashes($produit);
$societe = Stripslashes($societe);
$description = Stripslashes($description);
$prix = Stripslashes($prix);
// le champ url ne supporte pas les caractères çàé* etc biensur (l'adresse d'un site Web) donc //pas besoin de Stripslashes
$keywords = Stripslashes($keywords);

// les "@" avant les requetes c'est pour éviter les messages d'erreurs qui peuvent intéresser //les intrus pour l'attaque de votre site, c'est bénifique aussi pour forcer la page à afficher //des mots contenant apostrophe...

// Dans la ligne sivante les résultats s'afficherons par ordre alphabétique grace à //l'expression ORDER BY PRODUIT ASC,on peut mettre n'importe champ à la place de produit mais //les résultats suivrons dans ce cas l'ordre alphabétique de ce champ choisit, il y a d'autres //possibilités: 
//par exemple ORDER BY DATE ASC, classés par date le plus ancien au plus récent à noter que le //champ date sera nécéssaire si les produits sont référenciés par l'intermidiaire d'un //formulaire mis à la disposition des visiteurs mais si le webmaster qui insere les //informations pour n'importe type d'articles ce champs (date) ne serait pas d'importance. En //cas ou on enlève l'expression ORDER BY....les résultats s'afficherons en ordre en fonction de //leurs Id par défaut.

$sql = "SELECT produit,societe,description,prix,url FROM annuaire WHERE keywords LIKE %$recherche%' order by produit ASC";
$req = @mysql_query($sql);
$res= @mysql_num_rows($req);

//Si le nombre de résultat est superieur à zero
if($res>0)
{
echo "<p align=center><b><font color=navy face=Verdana size=3><span style=background-color:aqua>Résultats de la recherche</span></font></b></p><br><font color=black face=Verdana size=2>Pour le mot <b>".$recherche."</b> il y a <b>$res</b> résultat(s)<br><br>";
}
//Sinon
else
{
echo "<p align=center><b><font color=navy  face=Verdana size=3 ><span style=background-color:aqua>Résultats de la recherche</span></font></b></p><br><br><font color=black face=Verdana size=2>Aucun résultat pour la recherche sur <b>$recherche</b><br>
Essayez avec un autre orthographe ou un autre produit";
include('search.htm');
exit;
}

//Voici la boucle	
while( $sortie = mysql_fetch_array($req))
{
  
 //C'EST LE PLUS IMPORTANT , NUMEROTATION DES RESULTATS (PETITE BOUCLE AU SEIN DE LA PREMIERE)
 // static = se souvient de la valeur a l'appel precedent
      static $i=1 ;
//S'il y a un seul résultat rien ne s'écrit comme numérotation ou vous pouvez mettre une //expression:    echo "le seul résultat";   au lieu du vide
   if ($i==1 && $res==1) 
   {
   echo "";
   }
    //S'il y a plus qu'un résultat, pour le premier résultat il s'écrit comme numérotation
    //1er résultat
   if ($i==1 && $res>1) 
   {
   echo "<font color=orange><b>$i er</b></font> résultat<br>";
   } 
   //S'il y a plus qu'un résultat pour le reste des résultat il s'écrit comme numérotation
   //2ème résultat , 3ème résultat......
   if ($i!=1) 
   {
   echo "<font color=orange><b>$i ème</b></font> résultat<br>";
   }
   //de toute façon on peut enlever "er" et "ème" après la vriable  $i dans les 3 conditions et      //on obtiendra que des chiffres purs .
   //Incrémentation des résultats par un à chaque résultat
   $i++ ;
//FIN DE LA PETITE BOUCLE (L'OBJET PRINCIPAL DE CE SCRIPT,"NUMEROTATION DES RESULTATS")
 
//AFFICHAGE DES RESULTATS TROUVES 
print "<b><br><font color=navy>Nom de produit:</font></b> $sortie[produit].<br>";
print "<b><br><font color=navy>Société productrice:</font></b> $sortie[societe].<br>";
print "<b><br><font color=navy>Description:</font></b> $sortie[description].<br>";
print "<b><br><font color=navy>Prix:</font></b> $sortie[prix].<br><br>";
print "<b><font color=navy>Adresse URL:</font></b><br>";
//Si aucune url n'est spécifiée pour la société dans la base de données
if (empty($sortie[url])) {
  print "Aucune adresse URL n'est spécifiée<br><br>"; 	  
 }
 //Sinon l'adresse apprait et sous forme de lien Hyper Text
 else{
 print"<a href='$sortie[url]'>$sortie[url].</a><br><br>"; 
 } 
 //On sépare les résultats par une barre hr  avec couleur et taille configurables
 print "<hr color=#FF6666 size=2><br>"; 
}
//FIN DE LA BOUCLE

//Après l'affichage des résultats trouvés(numérotés), on peut effectuer une autre recherche
echo "Effectuer une autre recherche";
include('search.htm');
exit;

//Il faut toujours penser à fermer la connexion
mysql_close(); 
//On libère la mémoire
mysql_free_result ; 

//Conseil, suivez les étapes et commentaires, une fois vous avez tout compris enlevez les //commentaires sans oublier de garder une copie de ce code commenté pour la nécéssité

// Ce code (php+mysql) est testé sous apache / Windows XP  , ça marchait parfaitement avec moi.
// Des problèmes?   Serai ravis de recevoir vos messages/commentaires à:  sidoummoudz@yahoo.fr

//Je sai que j'ai mis trop de commentaires. J'espère qu'il searait utile à tous comme meme, à++

?>

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.