Bonjour,
J'ai un code de pagination qui est fonctionnel lorsqu'il n'y a pas de tri (ORDER BY) effectué sur les enregistrements de ma base sql (liste de livres).
Code pagination (page_principale.php) :
Code principal (page_principale.php) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 /////////////////DEBUT PAGINATION///////////////////////////////// /* Numero de page (1 par défaut) */ if( isset($_GET['page']) && is_numeric($_GET['page']) ) $page = $_GET['page']; else $page = 1; /* Nombre d'info par page */ $pagination = 100; /* Numéro du 1er enregistrement à lire */ $limit_start = ($page - 1) * $pagination; $requete_pagination = "SELECT COUNT(*) AS nb_total FROM livre "; $resultat_pagination = mysql_query($requete_pagination) or die('Erreur SQL !'.$requete_pagination.'<br>'.mysql_error()); $nb_total = mysql_fetch_array($resultat_pagination); $nb_total = $nb_total['nb_total']; /* Pagination */ $nb_pages = ceil($nb_total / $pagination); echo '<p>[ Page :'; /* Boucle sur les pages */ /* Boucle sur les pages */ for ($i = 1 ; $i <= $nb_pages ; $i++) { if ($i == $page ) { echo ' '.$i; } else { echo ' <a href="?page='.$i.'">'.$i.'</a> ';} } echo ' ]</p>'; /////////////////FIN PAGINATION/////////////////////////////////
La pagination fonctionne ainsi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 $select_livre = 'SELECT L.TITRE AS titre, L.ID_LIVRE AS id_livre, YEAR(L.DATE_ACHAT)AS date_achat,YEAR(L.DATE_PUBLICATION)AS date_publication,YEAR(L.DATE_LECTURE)AS date_lecture, L.miniatures AS miniatures, ED.NOM_EDITEUR AS editeur,ED.ID_EDITEUR AS id_editeur,LIB.NOM_LIBRAIRIE AS librairie,LIB.ID_LIBRAIRIE AS id_librairie, L.RESUME AS resume, L.STATUT_LECTURE AS statut_lecture FROM LIVRE L INNER JOIN EDITEUR ED ON ED.ID_EDITEUR = L.ID_EDITEUR INNER JOIN LIBRAIRIE LIB ON LIB.ID_LIBRAIRIE = L.ID_LIBRAIRIE'; $select_livre .=" LIMIT $limit_start, $pagination"; $resultat_livre = mysql_query($select_livre); etc
Mais, par la suite, j'ai voulu insérer un formulaire pour trier par éditeur, librairie... le résultat de ma requête $select_livre :
Et j'ai inséré dans mon code principal, avant la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <form action ="page_principale.php " method = "POST"> <p> <SELECT name="tri"> <OPTION VALUE="editeur">éditeur</OPTION> <OPTION VALUE="librairie">librairie</OPTION> <OPTION VALUE="contributeur">contributeur</OPTION> <OPTION VALUE="categorie">catégorie</OPTION> <OPTION VALUE="genre">genre</OPTION> </SELECT> <INPUT type="submit" value="Envoyer"> <p/> <form/>
le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part $select_livre .=" LIMIT $limit_start, $pagination";
Après avoir choisi dans le formulaire le choix "éditeur" puis cliqué sur "envoyer", ma page (page 1) se réaffiche bien triée par éditeur. Mais mon système de pagination ne s'adapte pas : si je clique sur la page 2, elle s'affiche bien mais je perds mon tri par éditeur...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $choix_tri= (iSset($_POST['tri']) ? $_POST['tri'] : null); if( $choix_tri == "editeur") { // tri par éditeur $select_livre .= " ORDER BY EDITEUR ASC"; } if( $choix_tri == "librairie") { // tri par librairie $select_livre .= " ORDER BY LIBRAIRIE ASC"; }
Je suppose qu'il faut intégrer la variable $choix_tri dans le système de pagination (?). Mais je ne sais pas comment m'y prendre. Pouvez-vous m'aider ?
Merci.
Partager