Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1808 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [php/mysql] Conserver les parametres de tri sur plusieurs pages

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php/mysql] Conserver les parametres de tri sur plusieurs pages

n°1400331
Ben-o
Posté le 04-07-2006 à 15:09:42  profilanswer
 

Bonjour, j'affiche les résultats de requetes (des annonces immmobilières) sur plusieurs page grâce à un script trouvé sur le net.
Parallèlement à ça, j'ai ajouté la possibilité de faire un tri (prix, référence...) en transmettant les variables grâce à GET.
Le tri fonctionne bien, mais uniquement sur la première page, dès que j'affiche la page 2, il n'est plus pris en compte (le tri).
Celà vient du fait que pour générer un affichage sur plusieurs pages, c'est également la méthode GET qui est utilisée.
Du coup je ne sais pas comment faire pour passer mes 2 variables en même temps.
Voici le code de ma page:
 

Code :
  1. <?php
  2. /****************** CODE AFFICHAGE SUR PLUSIEURS PAGES **********************/
  3.     //on verifie si la variable $pg est definie, sinon on l'initialise a 1
  4.     if(!isset($_GET['pg'])){
  5.      $pg = 1;
  6.     }
  7.     else{
  8.      $pg = $_GET['pg'];
  9.     }
  10.      // On verifie si la variable qui est cencée etre un numero de page est bien un chiffre, cela evite que gogole pirate avec une injection mysql
  11.     if(!is_numeric($pg)){
  12.      $pg = 1;
  13.     }
  14. /****************** DEBUT CONNEXION BASE DE DONNEES **********************/
  15.     $host = '****';
  16.     $user = '****';
  17.     $pass = '****';
  18.     $db = '****';
  19.     $link = mysql_connect ($host,$user,$pass) or die ('Erreur :'.mysql_error());
  20.     mysql_select_db($db) or die ('Erreur :'.mysql_error());
  21. /****************** FIN CONNEXION BASE DE DONNEES **********************/
  22. /****************** DEBUT DU SCRIPT PERMETTANT DE TRIER LES DONNEES **********************/
  23.     $result_sort = $_GET["sort"];
  24.     if ($result_sort == 'prix') {
  25.      $query_sort = " ORDER BY 'prix'";
  26.     }
  27.     elseif ($result_sort == 'categorie') {
  28.      $query_sort = " ORDER BY 'categorie'";
  29.     }
  30.     elseif ($result_sort == 'secteur') {
  31.      $query_sort = " ORDER BY 'secteur'";
  32.     }
  33.     elseif ($result_sort == 'surf_hab') {
  34.      $query_sort = " ORDER BY 'surf_hab'";
  35.     }
  36.     elseif ($result_sort == 'no_asp') {
  37.      $query_sort = " ORDER BY 'no_asp'";
  38.     }
  39. /****************** FIN DU SCRIPT PERMETTANT DE TRIER LES DONNEES **********************/
  40. /****************** SUITE CODE AFFICHAGE SUR PLUSIEURS PAGES **********************/
  41.     // Nombre d'enregstrements à afficher par page
  42.     $enreg_par_pg = 10;
  43.     // Fonction qui affiche les liens vers les autres pages, ainsi que les liens page suivante et page precedente
  44.     function pgs($enreg_par_pg, $pg, $link){
  45.     // Requête qui doit permettre le nombre de résultats total qui va être réparti sur plusieurs pages
  46.     $res = mysql_query("SELECT photo1,
  47.     type,
  48.     secteur,
  49.     categorie,
  50.     no_asp,
  51.     prix,
  52.     cp_internet,
  53.     ville_internet,
  54.     nb_chambres,
  55.     surf_hab,
  56.     surf_terrain
  57.     FROM t_type,
  58.     t_secteur,
  59.     t_maison,
  60.     t_categorie
  61.     WHERE t_maison.idx_type_offre = '1'
  62.     AND t_maison.idx_type_offre = t_type.id_type_offre
  63.     AND t_maison.idx_secteur = t_secteur.id_secteur
  64.     AND t_maison.idx_categorie = t_categorie.id_categorie" ) or die("Erreur MySQL: ".mysql_error($link));
  65.     $nb_enreg = mysql_num_rows($res);
  66.     // On calcule le nombre de pages
  67.     $nb_pg_rounded = ceil( $nb_enreg / $enreg_par_pg );   
  68.     // Numero de page precedente
  69.     $pp = $pg - 1;
  70.     // Numero de la page suivante
  71.     $ps = $pg + 1;
  72.     // Si l'utilisateur se se trouve pas a la page n°1
  73.     if($pg != 1){
  74.     // On affiche un lien page précedente
  75.     // Si votre script a besoin d'autre(s) variable(s) pour fonctionner n'oubliez pas des les transmettre en ajoutant &var=$var...
  76.     echo "<a href='?pg=$pp'>&lt;&lt;&nbsp;page pr&eacute;c&eacute;dente</a>";
  77.     }
  78.     // Définition d'une variable pour la boucle
  79.     $i=1;
  80.     // La syntaxe do...while permet d'effectuer la boucle au moins une fois!
  81.     do {
  82.     // Si $i n'est pas egal au numero de la page sur laquelle se trouve l'utilisateur...
  83.      if($i != $pg){
  84.      // ...on affiche un lien vers cette page
  85.      // Idem: si votre script a besoin d'autre(s) variable(s) pour fonctionner n'oubliez pas des les transmettre en ajoutant &var=$var...
  86.      echo "&nbsp;<a href='?pg=$i'>$i</a>\n";
  87.      }
  88.      else
  89.      {
  90.      // ...sinon on affiche simplement le n° de la page actuelle
  91.      echo "&nbsp;$i&nbsp;";
  92.      }
  93.     // Incrémentation de la viariable de la boucle
  94.     $i++;
  95.     // On recommence tant que $i n'atteint pas le numero de la derniere page
  96.     }
  97.     while($i <= $nb_pg_rounded);
  98.      // Si l'utilisateur n'est pas à la derniere page...
  99.      if($pg != $nb_pg_rounded){
  100.      // ...on affiche un lien page suivante
  101.      // Idem: si votre script a besoin d'autre(s) variable(s) pour fonctionner n'oubliez pas des les transmettre en ajoutant &var=$var...
  102.      echo "&nbsp;<a href='?pg=$ps'>page suivante&nbsp;&gt;&gt;</a>";
  103.      }
  104.     } // Fermeture function pgs
  105.     // Ici on calcule à partir de quel enregistrement il faut afficher $enreg_par_pg résultats
  106.     $limit = $enreg_par_pg*$pg-$enreg_par_pg;
  107.     // Rêquete qui selectione $enreg_par_pg resultats
  108.     $query = "SELECT photo1,
  109.     type,
  110.     secteur,
  111.     categorie,
  112.     no_asp,
  113.     prix,
  114.     cp_internet,
  115.     ville_internet,
  116.     nb_chambres,
  117.     surf_hab,
  118.     surf_terrain
  119.     FROM t_type,
  120.     t_secteur,
  121.     t_maison,
  122.     t_categorie
  123.     WHERE t_maison.idx_type_offre = '1'
  124.     AND t_maison.idx_type_offre = t_type.id_type_offre
  125.     AND t_maison.idx_secteur = t_secteur.id_secteur
  126.     AND t_maison.idx_categorie = t_categorie.id_categorie";
  127.     $query_limit= " LIMIT $limit, $enreg_par_pg";
  128. /****************** FIN CODE AFFICHAGE SUR PLUSIEURS PAGES **********************/
  129. /****************** REPRISE DE LA REQUETE POUR EXTRAIRE LE NOMBRE DE RESULTATS RETOURNES **********************/
  130.     $res = mysql_query("SELECT photo1,
  131.     type,
  132.     secteur,
  133.     categorie,
  134.     no_asp,
  135.     prix,
  136.     cp_internet,
  137.     ville_internet,
  138.     nb_chambres,
  139.     surf_hab,
  140.     surf_terrain
  141.     FROM t_type,
  142.     t_secteur,
  143.     t_maison,
  144.     t_categorie
  145.     WHERE t_maison.idx_type_offre = '1'
  146.     AND t_maison.idx_type_offre = t_type.id_type_offre
  147.     AND t_maison.idx_secteur = t_secteur.id_secteur
  148.     AND t_maison.idx_categorie = t_categorie.id_categorie" );
  149.     $nb_enreg = mysql_num_rows($res); // On attribue à $nb_enreg le nombre de résultats retournés
  150. /****************** FIN REPRISE DE LA REQUETE POUR EXTRAIRE LE NOMBRE DE RESULTATS RETOURNES **********************/
  151.     $query_final = $query.$query_sort.$query_limit;
  152.     //echo $query_final ."<br />"; // Ptite vérif ici
  153.     $reponse = mysql_query($query_final);
  154.    ?>
  155.     <table width="620" align="center" cellpadding="0" cellspacing="0">
  156.      <tr>
  157.       <td width="200"><strong><?php echo "$nb_enreg"; ?></strong> appartements trouvées.</td>
  158.       <td width="420" align="right">Trier par: <a href="selection_appartements.php?sort=prix">Prix</a> | <a href="selection_appartements.php?sort=categorie">Catégorie</a> | <a href="selection_appartements.php?sort=secteur">Secteur</a> | <a href="selection_appartements.php?sort=surf_hab">Surface</a> | <a href="selection_appartements.php?sort=no_asp">Référence</a>&nbsp;<td>
  159.      </tr>
  160.      <tr>
  161.       <td width="620" colspan="2"><?php echo "<br>"; pgs($enreg_par_pg, $pg, $link);?></td>
  162.      </tr>
  163.     </table><br />
  164.    <?php
  165.     while ($donnees = mysql_fetch_array($reponse) )
  166.     {
  167.    ?>
  168.     <table width="620" align="center" cellpadding="0" cellspacing="0">
  169.      <tr>
  170.       <td width="130">
  171.        <p><a href="detail_maisons.php?id=<?php echo $donnees['no_asp']; ?>"><img src="<?php echo $donnees['photo1']; ?>" height="90%" width="90%" alt="Photo" /></a></p>
  172.       </td>
  173.       <td width="390">
  174.        <span class="intitule_tab_result">Référence:</span> <span class="valeur_tab_result"><?php echo $donnees['no_asp']; ?></span><br />
  175.        <span class="intitule_tab_result">Catégorie:</span> <span class="valeur_tab_result"><?php echo $donnees['categorie']; ?></span><br />
  176.        <span class="intitule_tab_result">Localisation:</span> <span class="valeur_tab_result"><?php echo $donnees['ville_internet']; ?></span><br />
  177.        <span class="intitule_tab_result">Surface habitable:</span> <span class="valeur_tab_result"><?php echo $donnees['surf_hab']; ?> m²</span> <span class="intitule_tab_result">Surface terrain:</span> <span class="valeur_tab_result"><?php echo $donnees['surf_terrain']; ?> m²</span><br />
  178.        <span class="intitule_tab_result">Nombre de chambres:</span> <span class="valeur_tab_result"><?php echo $donnees['nb_chambres']; ?></span>
  179.       </td>
  180.       <td width="100">
  181.        <span class="intitule_tab_result">Prix:</span> <span class="valeur_tab_result"><?php echo $donnees['prix']; ?> €</span><br />
  182.        <p><em><font color="#FF8A00"><a href="detail_maisons.php?id=<?php echo $donnees['no_asp']; ?>">+ de détails</a></font></em></p>
  183.       </td>
  184.      </tr>
  185.     </table><br />
  186.    <?php
  187.     }
  188.     //On appele la fonction précédament créée pour afficher les liens vers les autres pages
  189.     echo "<br>";
  190.     pgs($enreg_par_pg, $pg, $link);
  191.     // Déconnexion de MySQL
  192.     mysql_close();
  193.    ?>


 
Merci par avance pour votre aide!

mood
Publicité
Posté le 04-07-2006 à 15:09:42  profilanswer
 

n°1400357
guitou12
Dev php à mi-temps :D
Posté le 04-07-2006 à 15:29:42  profilanswer
 

Tiens te revoilà ^^
 
Tu gagnes déjà un test en faisant ça je pense, pour la suite j'ai pas tout saisi ton souci faut que je mate ça de plus près
 

Code :
  1. if(!is_numeric($_GET['pg'])){
  2.                         $pg = 1;
  3.                     }
  4. else
  5. {
  6.         $pg = $_GET['pg'];
  7. }


 
Pas de test d'existence sur ton $_GET["sort"], si vide pas de sort est-ce bien le comportement voulu ?
 
Sinon pour ton souci m'est avis que tu t'es un peu compliqué la vie
 
Dans la continuité de ce que tu as fait tu devrais tout simplement passer dans l'url tes limites d'affichage des résultats et les appliquer dans ton LIMIT

Message cité 1 fois
Message édité par guitou12 le 04-07-2006 à 15:39:39
n°1400372
Woutcha
Posté le 04-07-2006 à 15:46:02  profilanswer
 

guitou12 a écrit :

Tiens te revoilà ^^
 
Tu gagnes déjà un test en faisant ça je pense, pour la suite j'ai pas tout saisi ton souci faut que je mate ça de plus près
 


 
Heu, la seul chose qu'il va gagner c'est un joli "Notice: Undefined index:" si jamais la page n'est pas passee en parametre...
 
Sinon Ben-o pour passer 2 parametres en GET:
page.php?param1=valeur1&param2=valeur2
 
Autre solution plus "propre", utiliser les sessions pour stocker tes criteres de tri
 
http://pl2.php.net/manual/fr/ref.session.php

n°1400386
guitou12
Dev php à mi-temps :D
Posté le 04-07-2006 à 15:59:02  profilanswer
 

Au temps pour moi j'écris plus vite que je ne réfléchis et forcément....
 
Tu as tjs mon mail au besoin Ben-o  :hello:

n°1400481
Ben-o
Posté le 04-07-2006 à 16:54:31  profilanswer
 

Salut Guitou, et merci à vous 2, je vais essayer ça:
page.php?param1=valeur1&param2=valeur2
 
J'avais pensé aux sessions, mais il me faut un résultat assez rapidement, du coup, je m'y pencherai plus tard.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [php/mysql] Conserver les parametres de tri sur plusieurs pages

 

Sujets relatifs
interaction entres des pages web sur différents serveursprobleme ON UPDATE CASCADE MYSQL
probleme avec un import fichier texte dans mysqlTri et calcul entre deux tables MySQL
Passer des parametres dans une fonction JS[HTML / PHP] Problème de formulaire entre 2 pages
[résolu] plusieurs variables dans la condition if ?Problème Passage de Paramètres à une fonction Javascript
[MySQL] Fonction recherche complexeAjouter plusieurs case à swicth
Plus de sujets relatifs à : [php/mysql] Conserver les parametres de tri sur plusieurs pages


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR