problème: Pagination moteur de recherche

problème: Pagination moteur de recherche - PHP - Programmation

Marsh Posté le 25-04-2007 à 14:32:48    

Bonjour.
 
J'ai un souci.
Je n'arrive pas a faire une pagination en fonction du mot que je tape dans ma recherche.
Exemple: si je recherche le mot "France", la fonction recherche cherche le mot france dans toutes les entrées de ma base et les affichent, mais il me faut un système de pagination pour ne pas alourdir la page.
 
 
Actuellement j'ai ce code:
 
 

Code :
  1. <?
  2. if(isset($_POST['requete']) && $_POST['requete'] != NULL) // on vérifie d'abord l'existence du post et on vérifie aussi si la requete n'est pas vide.
  3. {
  4. mysql_connect('', '', '');  // Connexion à MySQL
  5. mysql_select_db("" ); // Sélection de la base coursphp
  6. $requete = htmlspecialchars($_POST['requete']); // on créé une variable $requete pour faciliter lécriture de la requete sql, mais aussi pour empêcher les éventuels malins qui utiliseraient du Php ou du JS, avec la fonction htmlspecialchars().
  7. $query = mysql_query("SELECT * FROM webcams WHERE pays LIKE '%$requete%' OR ville LIKE '%$requete%' ORDER BY id DESC" )  or die (mysql_error()); // la requête, que maintenant vous devez comprendre ;)
  8. $nb_resultats = mysql_num_rows($query); // on utilise la fonction mysql_num_rows pour compter les résultats pour vérifier par après
  9. if($nb_resultats != 0) // si le nombre de résultats est supérieur à 0, on continue
  10. {
  11. // maintenant, on va afficher les résultats et la page qui donne les résultats et le nombre de résultats, avec un peu de code HTML pour faciliter la tâche.
  12. ?>
  13. <h3>Résultats de votre recherche.</h3>
  14. <p>Nous avons trouvé <? echo $nb_resultats ;  // on affiche le nombre de résultats
  15. if ($nb_resultats >  1)  {  echo '  résultats'; }   else {  echo '  résultat'; } // on vérifie le nombre de résultats pour orthographier correctement.
  16. ?>
  17. dans notre base de données. Voici les news que nous avons trouvé :<br/>
  18. <br/>
  19. <?
  20. while($donnees = mysql_fetch_array($query)) // on fait un while pour afficher la liste des fonctions trouvées, ainsi que l'id qui permettra de faire le lien vers la page de la fonction
  21. {
  22. ?>
  23.   <table>
  24.       <tr>
  25.         <?php
  26. // On fait une boucle pour lister tout ce que contient la table :
  27. {
  28. $i++;
  29. echo '<p id="'.$donnees['id'].'">';
  30. echo '<td><br />
  31. <div align="center"><h3>'.$donnees['ville'].'</div>'; //ici on rajoute le "<br/>"
  32. ?>
  33. <a href="webcams-<? echo $donnees['id']; ?>.php"> <? echo '<a href="webcams-'.$donnees['id'].'.php"><img src="'.$donnees['image'].'" width="140" height="100" alt="webcam '.$data['ville'].'" border="0" / style="filter:alpha(opacity=100); -moz-opacity: 1;" onmouseover="makevisible(this,0)" onmouseout="makevisible(this,1)" /></a></h3></td> ';
  34. ?></a><?
  35.    if($i == 3)
  36.                         {
  37.                                 echo "</tr><tr>";
  38.                                 $i = 0;
  39.                         }
  40.                 }
  41.                 ?>
  42.       </tr>
  43.     </table><?
  44. } // fin de la boucle
  45. ?><br/>
  46. <br/>
  47. <a href="rechercher.php">Faire une nouvelle recherche</a></p>
  48. <?
  49. } // fini d'afficher les résultats ! Maintenant, nous allons afficher l'éventuelle erreur en cas d'échec de recherche et le formulaire.
  50. else
  51. { // de nouveau, un peu de HTML
  52. ?>
  53. <h3>Pas de résultats</h3>
  54. <p>Nous n'avons trouvé aucun résultats pour votre requête "<? echo $_POST['requete']; ?>". <a href="rechercher.php">Réessayez</a> avec autre chose.</p>
  55. <?
  56. }// fini d'afficher l'erreur ^^
  57. mysql_close(); // on ferme mysql, on n'en a plus besoin
  58. }
  59. else
  60. { // et voilà le formulaire, en HTML de nouveau !
  61. ?>
  62. <p>Vous allez faire une recherche dans notre base de données pour rechercher un article. <br />
  63. Cette recherche s'effectue dans les titres et textes de chaque news.<br />
  64. <br />
  65. Tapez un seul mot pour réaliser une recherche.</p>
  66. <form action="rechercher2.php" method="Post">
  67. <input type="text" name="requete" size="30">
  68. <input type="submit" value="Ok">
  69. </form>
  70. <?
  71. }
  72. // et voilà, c'est fini !
  73. ?>


 
 
je voudrait intégrer ce code de pagination au code ci dessus:
 
 

Code :
  1. // On met dans une variable le nombre de messages qu'on veut par page
  2. $nombreDeMessagesParPage = 20; // Essayez de changer ce nombre pour voir :o)
  3. // On récupère le nombre total de messages
  4. $retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM webcams');
  5. $donnees = mysql_fetch_array($retour);
  6. $totalDesMessages = $donnees['nb_messages'];
  7. // On calcule le nombre de pages à créer
  8. $nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
  9. // Puis on fait une boucle pour écrire les liens vers chacune des pages
  10. echo 'Page : ';
  11. for ($i = 1 ; $i <= $nombreDePages ; $i++)
  12. {
  13.     echo '<a href="recherche.php?page=' . $i . '">' . $i . '</a> ';
  14. }
  15. ?>
  16. </p>
  17. <?php
  18. if (isset($_GET['page']))
  19. {
  20.     $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (recherche.php?page=4)
  21. }
  22. else // La variable n'existe pas, c'est la première fois qu'on charge la page
  23. {
  24.     $page = 1; // On se met sur la page 1 (par défaut)
  25. }
  26. // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
  27. $premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
  28. $reponse = mysql_query('SELECT * FROM webcams ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);


Message édité par wydook le 25-04-2007 à 15:40:09
Reply

Marsh Posté le 25-04-2007 à 14:32:48   

Reply

Marsh Posté le 25-04-2007 à 23:27:01    

Un gros problème dans ton code (largement documenté et expliqué par des forumeurs bien plus calés en SQL que moi) est le fait que tu utilises à fusion le "LIKE %....%" , ce qui en gros plombe tes recherches parce que rend inutiles les indexes. Passe tes champs en fulltext et suivant ton serveur de base de données, il fera déjà le travail de recherche (personnellement j'ai vu faire Oracle et j'étais juste sur le cul :D)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed