comment garder une valeur de requete?

comment garder une valeur de requete? - PHP - Programmation

Marsh Posté le 12-03-2009 à 18:03:52    

Hello
je tourne en rond depuis klk jours.
je cherche à afficher des resultats d'une base importante,donc sur plusieures pages.J'arrive à afficher une pagination,sauf que les pages suivantes ne gardent pas la requete récupérée du formulaire. donc je me disais que créer une session permettrait de garder cette requete sur chaque page appelées,je me trompe..?
et comment écrire et intégrer cette session si necessaire,car j'ai des retours parse errors.
Si vous avez une autre idée,je prends
(le script est classique pour pagination et requete de BDD)

Code :
  1. <?php
  2. session_start() ;
  3. $recherche = isset($_POST['recherche']);
  4. //enregistrement d'une variable de session
  5. $_SESSION['recherche'] = $recherche;
  6. function barre_navigation ($nb_total,
  7. $nb_affichage_par_page,
  8. $debut,
  9. $nb_liens_dans_la_barre) {
  10. $barre = '';
  11. // on recherche l'URL courante munie de ses paramètre auxquels on ajoute le paramètre 'debut' qui jouera le role du premier élément de notre LIMIT
  12. if ($_SERVER['QUERY_STRING'] == "" ) {
  13. $query = $_SERVER['PHP_SELF'].'?debut=';
  14. }
  15. else {
  16. $tableau = explode ("debut=", $_SERVER['QUERY_STRING']);
  17. $nb_element = count ($tableau);
  18. if ($nb_element == 1) {
  19. $query = $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&debut=';
  20. }
  21. else {
  22. if ($tableau[0] == "" ) {
  23. $query = $_SERVER['PHP_SELF'].'?debut=';
  24. }
  25. else {
  26. $query = $_SERVER['PHP_SELF'].'?'.$tableau[0].' '.$recherche.'debut=';
  27. }
  28. }
  29. }
  30. // on calcul le numéro de la page active
  31. $page_active = floor(($debut/$nb_affichage_par_page)+1);
  32. // on calcul le nombre de pages total que va prendre notre affichage
  33. $nb_pages_total = ceil($nb_total/$nb_affichage_par_page);
  34. // on calcul le premier numero de la barre qui va s'afficher, ainsi que le dernier ($cpt_deb et $cpt_fin)
  35. // exemple : 2 3 4 5 6 7 8 9 10 11 << $cpt_deb = 2 et $cpt_fin = 11
  36. if ($nb_liens_dans_la_barre%2==0) {
  37. $cpt_deb1 = $page_active - ($nb_liens_dans_la_barre/2)+1;
  38. $cpt_fin1 = $page_active + ($nb_liens_dans_la_barre/2);
  39. }
  40. else {
  41. $cpt_deb1 = $page_active - floor(($nb_liens_dans_la_barre/2));
  42. $cpt_fin1 = $page_active + floor(($nb_liens_dans_la_barre/2));
  43. }
  44. if ($cpt_deb1 <= 1) {
  45. $cpt_deb = 1;
  46. $cpt_fin = $nb_liens_dans_la_barre;
  47. }
  48. elseif ($cpt_deb1>1 && $cpt_fin1<$nb_pages_total) {
  49. $cpt_deb = $cpt_deb1;
  50. $cpt_fin = $cpt_fin1;
  51. }
  52. else {
  53. $cpt_deb = ($nb_pages_total-$nb_liens_dans_la_barre)+1;
  54. $cpt_fin = $nb_pages_total;
  55. }
  56. if ($nb_pages_total <= $nb_liens_dans_la_barre) {
  57. $cpt_deb=1;
  58. $cpt_fin=$nb_pages_total;
  59. }
  60. // si le premier numéro qui s'affiche est différent de 1, on affiche << qui sera un lien vers la premiere page
  61. if ($cpt_deb != 1) {
  62. $cible = $query.(0);
  63. $lien = '<A HREF="'.$cible.'"><<</A>  ';
  64. }
  65. else {
  66. $lien='';
  67. }
  68. $barre .= $lien;
  69. // on affiche tous les liens de notre barre, tout en vérifiant de ne pas mettre de lien pour la page active
  70. for ($cpt = $cpt_deb; $cpt <= $cpt_fin; $cpt++) {
  71. if ($cpt == $page_active) {
  72. if ($cpt == $nb_pages_total) {
  73. $barre .= $cpt;
  74. }
  75. else {
  76. $barre .= $cpt.' - ';
  77. }
  78. }
  79. else {
  80. if ($cpt == $cpt_fin) {
  81. $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page).'&recherche='.$_POST['recherche'];
  82. $barre .= "'>".$cpt."</A>";
  83. }
  84. else {
  85. $barre .= "<A HREF='".$query.(($cpt-1)*$nb_affichage_par_page).'&recherche='.$_POST['recherche'];
  86. $barre .= "'>".$cpt."</A> - ";
  87. }
  88. }
  89. }
  90. $fin = ($nb_total - ($nb_total % $nb_affichage_par_page));
  91. if (($nb_total % $nb_affichage_par_page) == 0) {
  92. $fin = $fin - $nb_affichage_par_page;
  93. }
  94. // si $cpt_fin ne vaut pas la dernière page de la barre de navigation, on affiche un >> qui sera un lien vers la dernière page de navigation
  95. if ($cpt_fin != $nb_pages_total) {
  96. $cible = $query.$fin;
  97. $lien = '  <A HREF="'.$cible.'">>></A>';
  98. }
  99. else {
  100. $lien='';
  101. }
  102. $barre .= $lien;
  103. return $barre;
  104. }
  105. ?>
  106. <html>
  107. <head>
  108. <title>Les livres de la bibliothèque</title>
  109. </head>
  110. </body>
  111. Les différents restaurants :<br /><br />
  112. <?php
  113. // on se connecte à notre base
  114. $base = mysql_connect ('localhost', 'root', '');
  115. mysql_select_db ('youresto', $base);
  116. // Récupère la variable
  117. $recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';
  118. // on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
  119. $sql = "SELECT count(city) FROM jos_restaurante WHERE city LIKE '".$recherche."%'";
  120. // on exécute cette requête
  121. $resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  122. // on récupère le nombre d'éléments à afficher
  123. $nb_total = mysql_fetch_row($resultat);
  124. // on teste si ce nombre de vaut pas 0
  125. if (($nb_total = $nb_total[0]) == 0) {
  126. echo 'Aucune réponse trouvée';
  127. }
  128. else {
  129. echo '<table>'."\n";'<tr><td><td>Description</td></tr>';
  130. // sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
  131. if (!isset($_GET['debut'])) $_GET['debut'] = 0;
  132. $nb_affichage_par_page = 15;
  133. // Préparation de la requête avec le LIMIT
  134. $sql = "SELECT title, city FROM jos_restaurante WHERE city LIKE '".$recherche."%' ORDER BY city ASC LIMIT ".$_GET["debut"].",".$nb_affichage_par_page;
  135. echo($sql);
  136. // on exécute la requête
  137. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
  138. // on va scanner tous les tuples un par un
  139. while ($data = mysql_fetch_array($req)) {
  140. // on affiches les résultats dans la <table>
  141. echo '<tr><td><td>' , htmlentities(trim($data['title'])) , '</td></tr>';
  142. echo '<tr><td><td>' , htmlentities(trim($data['city'])) , '</td></tr>'."\n";
  143. }
  144. // on libère l'espace mémoire alloué pour cette requête
  145. mysql_free_result ($req);
  146. echo '</table><br />'."\n";
  147. // on affiche enfin notre barre
  148. echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 10).'</span>';
  149. }
  150. // on libère l'espace mémoire alloué pour cette requête
  151. mysql_free_result ($resultat);
  152. // on ferme la connexion à la base de données.
  153. mysql_close ();
  154. echo '</table><br />';
  155. ?>
  156. </body>
  157. </html>


 
 
merci


Message édité par chanteur06 le 13-03-2009 à 10:46:42
Reply

Marsh Posté le 12-03-2009 à 18:03:52   

Reply

Marsh Posté le 12-03-2009 à 19:38:21    

Si ça peut aider, voilà l'erreur affichée sur l'appel de la page suivante:
 
Notice: Undefined index: recherche in C:\Program Files\wamp\www\rech3\recherche.php on line 102
 
ce serait pas le code session ou autre à mettre dans la navigation...?

Reply

Marsh Posté le 12-03-2009 à 20:46:10    

ouch ..
$recherche = isset($_POST['recherche']);
=rien si rien
if($_POST['recherche'])$_SESSION[r]=$_POST['recherche'];
voilà


Message édité par grosbin le 12-03-2009 à 20:46:48

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 12-03-2009 à 20:46:21    

Comme ça là je dirais tu accède à un index qui s'appelle recherche et qui n'existe pas. En poussant mes investigation je dirais que ça se passe à la ligne 102 du fichier C:\Program Files\wamp\www\rech3\recherche.php


---------------
"L'informatique n'est pas plus la science des ordinateurs que l'astronomie n'est celle des télescopes." Michael R. Fellows & Ian Parberry
Reply

Marsh Posté le 12-03-2009 à 21:41:39    

simplement ce que j'ai noté il a soit 1 soit rien dans recherche
du coup notice ligne 102


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 13-03-2009 à 09:49:30    

Je n'ai fait que deux pages: l'une est le formulaire,et l'autre est celle du code ci dessus.
le formulaire n'a pas de session...(peut etre là l'erreur)
ou peut etre mettre session dans l'appel de navigation <a href...   ?
L'appel est ok sur le premier affichage de ce code,où la pagination est affichée,mais lorsque je clique sur la pagination en appelant la page deux (qui ne correspond qu'à php self) la base est appelé à zero (le départ de la base) et la requete du formulaire n'est pas tenue...
C'est normal?

Reply

Sujets relatifs:

Leave a Replay

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