Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

NUMÉROTATION DES RÉSULTATS DE RECHERCHE AVEC PHP+MYSQL+TRUCS


Information sur la source

Catégorie :Astuces Niveau : Débutant Date de création : 06/11/2003 Vu : 5 987

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

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>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</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;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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

  • <? 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, à++
  • ?>
<? 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, à++

?>  


Commentaires et avis

signaler à un administrateur
Commentaire de calfou le 06/11/2003 23:43:13

Coool l'explication!!! Bon je promet pas avoir tout compris mais une chose est sure, ça m'a plustôt l'air très très bien expliqué!!! Bon je vais peut être essayer quand j'aurais fini ma nouvelle version de mon site et je reviendrais dire si c'est bien... ;)

signaler à un administrateur
Commentaire de alanya le 07/11/2003 08:24:27

je suis d'accord avec calfou : c'est vraiment bien un code commenté comme ça.
je teste et je reviens donner mon avis

signaler à un administrateur
Commentaire de netbip le 07/11/2003 09:23:43

Si toutes les personnes qui déposaient des codes pensaient à faire comme toi, mettre des commentaires détaillés, ce serait merveilleux... On voit ainsi où tu veux en venir. Chacun a sa manière de raisonner, de concevoir, et c'est pas toujours évident de comprendre l'enchaînement de certains codes...
Je vais faire comme Calfou et Alanya, dés que j'ai du temps je vais regarder ça de plus prêt, c'est vraiment intéressant comme code, les applications sont pertinentes...
Merci encore Semetic !
A+

signaler à un administrateur
Commentaire de Bilou972 le 29/05/2004 22:42:13

Pas mal ton code il me sert bien pour l'examen (bts ig). Actuellement je cherche a lui permettre de faire une recherche sur plusieurs mots voir lien


http://gregory.kokanosky.free.fr/tutorial/moteur/

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 1,108 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.