[resolu]Tenir une requete?

Tenir une requete? [resolu] - PHP - Programmation

Marsh Posté le 17-03-2009 à 09:48:13    

Bonjour,
j'ai un cas que personne n'arrive à résoudre...Voilà:
j'ai un formulaire d'où part une requête.j'aimerais que cette requête soit suivi sur le code suivant de page en page. hors elle n'est pas "tenue".les pages suivantes n'affichent plus la demande mais le premier enregistrement de la base.comment faire pour qu'elle soit renouvellée sur toute les pages,sachant que lorsque je renseigne le select de maniere fixe et determiné,ça fonctionne,les bons resultats s'affichent de page en page...Je suis en local avec wamp php5...merci beaucoup!
 

Code :
  1. <html>
  2. <head>
  3. <title>Script de pagination automatique en php</title>
  4. <!-- Styles CSS -->
  5. <style type="text/css">
  6. html {font-size: 1.4em;}
  7. .pagination a {color: black;}
  8. .pagination a:hover {color: red; text-decoration: none;}
  9. .pagination a:visited {color: red; text-decoration: none;}
  10. </style>
  11. </head>
  12. <body>
  13. <?php
  14. //==============================================================================
  15. // Configuration à modifier avec vos propres paramètres
  16. //==============================================================================
  17. // Connexion à la base de données
  18. $host = "localhost";
  19. $user = "root";
  20. $pass = "";
  21. $data = "youresto"; // Nommer ici la base de données
  22. $connect = mysql_connect($host, $user, $pass)
  23.   or die("Connexion au serveur impossible !" );
  24. $db = mysql_select_db($data, $connect)
  25.   or die("Sélection de la base impossible !" );
  26.  
  27. $recherche = $_POST['recherche'];
  28. // Paramétrage de la requête (ne pas modifier le nom des variable)
  29. $table = "jos_restaurante"; // Table à sélectionner dans la base
  30. $champ = "city"; // Champ de la table à afficher pour tester ce script
  31. $champ2 = "title";
  32. $sql = "SELECT city,title FROM $table WHERE $champ LIKE '".'$recherche'."%'"; // Requête initiale (à compléter si nécessaire)
  33. $parpage = 20; // Nombre d'enregistrements par page à afficher
  34. //==============================================================================
  35. // Déclaration et initialisation des variables (ici ne rien modifier)
  36. //==============================================================================
  37. // On définit le suffixe du lien url qui affichera les pages
  38. // $_SERVEUR['PHP_SELF'] donne l'arborescence de la page courante
  39. $url = $_SERVER['PHP_SELF']."?limit=";
  40. $total = mysql_query($sql); // Résultat total de la requête $sql
  41. $nblignes = mysql_num_rows($total); // Nbre total d'enregistrements
  42. // On calcule le nombre de pages à afficher en arrondissant
  43. // le résultat au nombre supérieur grâce à la fonction ceil()
  44. $nbpages = ceil($nblignes/$parpage);
  45. //==============================================================================
  46. // Exemple d'affichage HTML
  47. //==============================================================================
  48. // On teste en affichant la valeur des variables (facultatif)
  49. echo "<p>La table <b>".$table."</b> compte ".$nblignes." <b>".$champ."</b>.";
  50. echo "<br />\n"."On affiche <b>".$parpage." enregistrements</b> par page, ";
  51. echo "soit un total de <b>".$nbpages." pages</b>.</p>\n";
  52. // Si une valeur 'limit' est passée par url, on vérifie la validité de
  53. // cette valeur par mesure de sécurité avec la fonction validlimit()
  54. // cette fonction retourne automatiquement le résultat de la requête
  55. $result = validlimit($nblignes,$parpage,$sql);
  56. // On affiche le résultat de la requête
  57. // On crée donc ici son propre tableau pour lequel on souhaite une pagination
  58. while ($ligne = mysql_fetch_array($result)) {
  59.   echo $ligne[$champ]."\n",$ligne[$champ2]."<br />\n";
  60. }
  61. // Menu de pagination que l'on place après la requête
  62. echo "<div class='pagination'>";
  63. echo pagination($url,$parpage,$nblignes,$nbpages);
  64. echo "</div>";
  65. mysql_free_result($result); // Libère le résultat de la mémoire
  66. //==============================================================================
  67. // Fonctions à copier de préférence dans un fichier 'include/fonctions.inc.php'
  68. //==============================================================================
  69. function pagination($url,$parpage,$nblignes,$nbpages)
  70. {
  71.   // On crée le code html pour la pagination
  72.   $html = precedent($url,$parpage,$nblignes); // On crée le lien precedent
  73.   // On vérifie que l'on a plus d'une page à afficher
  74.   if ($nbpages > 1) {
  75.     // On boucle sur les numéros de pages à afficher
  76.     for ($i = 0 ; $i < $nbpages ; ++$i) {
  77.       $limit = $i * $parpage; // On calcule le début de la valeur 'limit'
  78.       $limit = $limit.",".$parpage; // On fait une concaténation avec $parpage
  79.       // On affiche les liens des numéros de pages
  80.       $html .= "<a href=".$url.$limit.">".($i + 1)."</a> | " ;
  81.     }
  82.   }
  83.   // Si l'on a qu'une page on affiche rien
  84.   else {
  85.     $html .= "";
  86.   }
  87.   $html .= suivant($url,$parpage,$nblignes); // On crée le lien suivant
  88.   // On retourne le code html
  89.   return $html;
  90. }
  91. function validlimit($nblignes,$parpage,$sql)
  92. {
  93.   // On vérifie l'existence de la variable $_GET['limit']
  94.   // $limit correspond à la clause LIMIT que l'on ajoute à la requête $sql
  95.   if (isset($_GET['limit'])) {
  96.     $pointer = split('[,]', $_GET['limit']); // On scinde $_GET['limit'] en 2
  97.     $debut = $pointer[0];
  98.     $fin = $pointer[1];
  99.     // On vérifie la conformité de la variable $_GET['limit']
  100.     if (($debut >= 0) && ($debut < $nblignes) && ($fin == $parpage)) {
  101.       // Si $_GET['limit'] est valide on lance la requête pour afficher la page
  102.       $limit = $_GET['limit']; // On récupère la valeur 'limit' passée par url
  103.       $sql .= " LIMIT ".$limit.";"; // On ajoute $limit à la requête $sql
  104.       $result = mysql_query($sql); // Nouveau résultat de la requête
  105.     }
  106.     // Sinon on affiche la première page
  107.     else {
  108.       $sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête
  109.       $result = mysql_query($sql); // Nouveau résultat de la requête
  110.     }
  111.   }
  112.   // Si la valeur 'limit' n'est pas connue, on affiche la première page
  113.   else {
  114.     $sql .= " LIMIT 0,".$parpage.";"; // On ajoute la valeur LIMIT à la requête
  115.     $result = mysql_query($sql); // Nouveau résultat de la requête
  116.   }
  117.   // On retourne le résultat de la requête
  118.   return $result;
  119. }
  120. function precedent($url,$parpage,$nblignes)
  121. {
  122.   // On vérifie qu'il y a au moins 2 pages à afficher
  123.   if ($nblignes > $parpage) {
  124.     // On vérifie l'existence de la variable $_GET['limit']
  125.     if (isset($_GET['limit'])) {
  126.       // On scinde la variable 'limit' en utilisant la virgule comme séparateur
  127.       $pointer = split('[,]', $_GET['limit']);
  128.       // On récupère le nombre avant la virgule et on soustrait la valeur $parpage
  129.       $pointer = $pointer[0]-$parpage;
  130.       // Si on atteint la première page, pas besoin de lien 'Précédent'
  131.       if ($pointer < 0) {
  132.         $precedent = "";
  133.       }
  134.       // Sinon on affiche le lien avec l'url de la page précédente
  135.       else {
  136.         $limit = "$pointer,$parpage";
  137.         $precedent = "<a href=".$url.$limit."><</a> | ";
  138.       }
  139.     }
  140.     else {
  141.       $precedent = ""; // On est à la première page, pas besoin de lien 'Précédent'
  142.     }
  143.   }
  144.   else {
  145.   $precedent = ""; // On a qu'une page, pas besoin de lien 'Précédent'
  146.   }
  147.   return $precedent;
  148. }
  149. function suivant($url,$parpage,$nblignes)
  150. {
  151.   // On vérifie qu'il y a au moins 2 pages à afficher
  152.   if ($nblignes > $parpage) {
  153.     // On vérifie l'existence de la variable $_GET['limit']
  154.     if (isset($_GET['limit'])) {
  155.       // On scinde la variable 'limit' en utilisant la virgule comme séparateur
  156.       $pointer = split('[,]', $_GET['limit']);
  157.       // On récupère le nombre avant la virgule auquel on ajoute la valeur $parpage
  158.       $pointer = $pointer[0] + $parpage;
  159.       // Si on atteint la dernière page, pas besoin de lien 'Suivant'
  160.       if ($pointer >= $nblignes) {
  161.         $suivant = "";
  162.       }
  163.       // Sinon on affiche le lien avec l'url de la page suivante
  164.       else {
  165.         $limit = "$pointer,$parpage";
  166.         $suivant = "<a class='pagination' href=".$url.$limit.">></a>";
  167.       }
  168.     }
  169.     // Si pas de valeur 'limit' on affiche le lien de la deuxième page
  170.     if (@$_GET['limit']== false) {
  171.       $suivant = "<a href=".$url.$parpage.",".$parpage.">></a>";
  172.     }
  173.   }
  174.   else {
  175.   $suivant = ""; // On a qu'une page, pas besoin de lien 'Suivant'
  176.   }
  177.   return $suivant;
  178. }
  179. // Fin du script
  180. ?>
  181. </body>
  182. </html>


Message édité par chanteur06 le 17-03-2009 à 18:38:33
Reply

Marsh Posté le 17-03-2009 à 09:48:13   

Reply

Marsh Posté le 17-03-2009 à 10:20:19    

ben faut utiliser les variables de session.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2009 à 10:43:05    

ben j'ai dejà essayé ça marche pas...dis moi comment tu ferais pour voir....je veux bien réessayer

Reply

Marsh Posté le 17-03-2009 à 11:04:12    

pour ce type de recherche je te conseil d'utilisé GET au lieu de $_POST['recherche'], parce que a chaque fois que tu feras suivant pour precedant, il va te demandé de reconfirmer l'envoie post
 
sinon avec SQL_CALC_FOUND_ROWS, tu peux avoir le nombre total d'enregistrement tout en conservant la LIMIT

Reply

Marsh Posté le 17-03-2009 à 11:14:17    

nope!
j'ai remplacé par GET....toujours rien, aucun resultat

Code :
  1. $recherche = $_GET['recherche'];
  2. // Paramétrage de la requête (ne pas modifier le nom des variable)
  3. $table = "jos_restaurante"; // Table à sélectionner dans la base
  4. $champ = "city"; // Champ de la table à afficher pour tester ce script
  5. $champ2 = "title";
  6. $sql = "SELECT city,title FROM $table WHERE $champ LIKE '".'$recherche'."%'"; // Requête initiale (à compléter si nécessaire)

Reply

Marsh Posté le 17-03-2009 à 11:43:07    

Il ne t'a pas dit que remplacer post par get allait résoudre ton problème, mais simplement que c'était mieux de faire ainsi.  
 
Passe par des sessions comme on te l'a suggéré. Tu as dit que ça ne marchait pas, et que tu avais essayé. Peux-tu nous montrer le code ?

Reply

Marsh Posté le 17-03-2009 à 11:51:10    

un truc du genre avant al construction de ta requête

Code :
  1. if (isset($_SESSION["recherche"])) {
  2.     $recherche = $_SESSION["recherche"];
  3. } else {
  4.     $recherche = strip_tags($_GET['recherche']);
  5.     $_SESSION["recherche"] = $recherche;
  6. }


Message édité par rufo le 17-03-2009 à 11:52:11

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2009 à 15:48:04    

voilà ce que j'ai mis dans le code

Code :
  1. <?php
  2. session_start();
  3. //==============================================================================
  4. // Configuration à modifier avec vos propres paramètres
  5. //==============================================================================
  6. // Connexion à la base de données
  7. $host ="localhost";
  8. $user ="root";
  9. $pass ="";
  10. $data ="youresto"; // Nommer ici la base de données
  11. $connect = mysql_connect($host, $user, $pass)
  12.   or die("Connexion au serveur impossible !" );
  13. $db = mysql_select_db($data, $connect)
  14.   or die("Sélection de la base impossible !" );
  15.  
  16.     if (isset($_SESSION["recherche"])) {
  17.         $recherche = $_SESSION["recherche"];
  18.     } else {
  19.         $recherche = strip_tags($_GET['recherche']);
  20.         $_SESSION["recherche"] = $recherche;
  21.     }
  22. // Paramétrage de la requête (ne pas modifier le nom des variable)
  23. $table = "jos_restaurante"; // Table à sélectionner dans la base
  24. $champ = "city"; // Champ de la table à afficher pour tester ce script
  25. $champ2 = "title";
  26. $sql = "SELECT city,title FROM $table WHERE $champ LIKE '".'recherche'."%'"; // Requête initiale (à compléter si nécessaire)
  27. $parpage = 20; // Nombre d'enregistrements par page à afficher


 
mais la valeur n'est toujours pas tenue... rien n'est meme récupéré de la base :-(

Reply

Marsh Posté le 17-03-2009 à 16:04:50    

ça m'étonnes pas, t'as vu ce que t'as écrit ligne 27 :??: Décidemment, c'est la journée des mecs qui veulent faire du PHP/MySQL mais qui n'ont même pas pris le temps de lire un peu de doc sur la syntaxe du PHP ou des requêtes SQL :/
 

Code :
  1. $sql = "SELECT city, title FROM $table WHERE $champ LIKE '".addslashes($recherche)."%'";


Message édité par rufo le 17-03-2009 à 16:05:07

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2009 à 16:06:36    

Pour débugger, un conseil, fait un echo de $sql pour voir la requête qui est générée et ensuite, tu l'exécutes dans phpmyadmin pour voir s'il lève des erreurs ou quels sont les enregistrements retournés ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2009 à 16:06:36   

Reply

Marsh Posté le 17-03-2009 à 16:56:49    

toujours rien rufo..
en faisant un debugg myadmin je peux pas avoir de renvoi puisque la requete n'est pas renseignée (recherche)
si je la renseigne ça fonctionne.
l'echo retourné est bon,bonne table bon champ...
maintenant le resultat retourné est...vide et affiche le début de la base!
ceci dit,ça a fonctionné un temps et j'ai cru que vous y étiez arrivé!!! les pages se sont affichés avec la requete demandée tout comme il faut...et en faisant une demande sur une autre requete(autre ville dans le formulaire) les résultats affichés étaient ceux de la ville précédente!!!mais en vidant la session avec unset,là j'ai carrément plus que la requete vide
 
SELECT city, title FROM jos_restaurante WHERE city LIKE '%'
 
La table jos_restaurante compte 1714 city.
On affiche 20 enregistrements par page, soit un total de 86 pages.

 
vous en pensez quoi...?

Reply

Marsh Posté le 17-03-2009 à 17:09:22    

ça y est!!!!!!!!!!!!!!!!!!!!!!!
 
le if a été changé de  
 
# if (isset($_SESSION["recherche"])) {
#         $recherche = $_SESSION["recherche"];
#     } else {
#         $recherche = strip_tags($_GET['recherche']);
#         $_SESSION["recherche"] = $recherche;
#     }
 
en
 
if(isset($_POST['recherche']))
 $_SESSION['recherche'] = $_POST['recherche'];
$recherche = $_SESSION['recherche'];
 
en fait c'est l'apport de addslashes qui à l'air de faire fonctionner le script!
et personne avant toi rufo ne l'avais remarqué!!!!
 
grand bravo et super mille merci pour votre interet et vos contributions...comment je peux remercier..?

Reply

Marsh Posté le 17-03-2009 à 17:09:49    

Mon bout de code permet de stocker une recherche en session. Maintenant il te faut l'adapter pour lui faire prendre en compte une nouvelle recherche. Là, c'est normal qu'il garde la première recherche puisque la variable de session "recherche" existe. Il faut à un moment la réinitialiser.

Code :
  1. $rechercheGET = strip_tags($_GET['recherche']);
  2. if ((isset($_SESSION["recherche"])) && ($_SESSION["recherche"] == $rechercheGET)){
  3.     $recherche = $_SESSION["recherche"];
  4. } else {
  5.     $recherche = $rechercheGET;
  6.     $_SESSION["recherche"] = $recherche;
  7. }


 
Faut un peu réfléchir par toi-même. Là, c'est pas un pb de code php, c'est purement un pb de logique.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2009 à 17:15:27    

tiens, t'es passé en POST maintenant, plus en GET? Bon ben t'as qu'à remplacer $_GET par $_POST dans le bout de code que je t'ai fourni. Si tes données peuvent venir de POST et de GET :

Code :
  1. if (isset($_GET)) {
  2.     $FormData = $_GET;
  3. } elseif (isset($_POST)) {
  4.        $FormData = $_POST;
  5. } else {
  6.     $FormData = NULL;
  7. }
  8. if (!is_null($FormData))
  9. {
  10.     $rechercheForm = strip_tags($FormData['recherche']);
  11.     if ((isset($_SESSION["recherche"])) && ($_SESSION["recherche"] == $rechercheForm)){
  12.         $recherche = $_SESSION["recherche"];
  13.     } else {
  14.            $recherche = $rechercheForm;
  15.         $_SESSION["recherche"] = $recherche;
  16.     }
  17. }


Message édité par rufo le 17-03-2009 à 17:17:03

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-03-2009 à 17:23:37    

comment je note le post comme résolu.....?

Reply

Marsh Posté le 17-03-2009 à 17:37:41    

Tu édites ton premier post de ce topic et tu mets [résolu] en début du titre du topic.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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