Bonjour à tous et à toutes
J'ai fais face il y a peu à un problème méthodologique dans la réalisation d'un script destiné à affiner l'affichage des annonces, sur un site de petites annonces
Il s'agissait de les trier par catégorie, ville etc...J'ai reçu le script suivant comme solution:
La présence de la fonction de pagination et d'une requête pour obtenir le nombre total d'annonces n'est pas fortuite. J'y reviens...
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 include('fonction_pagination.php'); $page = (isset($_GET['page']) ? htmlspecialchars(intval($_GET['page'])): 1); if($page <= 0) { $page = 1; } $debut = ($page - 1) *30; $retour = 'SELECT COUNT(*) AS total FROM ventes WHERE '; $requete_sql = 'SELECT * FROM ventes WHERE '; $values = array(); $champs = array('catégorie','ville','demande_offre','part_pro'); if(isset($_POST)){ foreach ($_POST as $key => $value) { if(!empty($value)){ foreach ($champs as $nom) { if($key == $nom){ $requete_sql .= $key.'=\''.$value.'\' AND '; $retour .= $key.'=\''.$value.'\' AND '; } } } } $retour .= '1=1'; $req3 = $bdd -> query($retour); $nombreElementsTotal = $req3 -> fetchcolumn(); $nombreDePages = ceil($nombreElementsTotal/30); $requete_sql .= '1 = 1 LIMIT '.$debut.',30'; echo $requete_sql ; $req = $bdd -> query($requete_sql); }
Le formulaire de tri contient 4 champs et un bouton validé. Tous les champs sont des SELECT. Ceux-ci sont stocké dans un tableau et utilisé dans le WHERE d'une requête SQL.
Mais voilà, si ce procédé fonctionne bien sur la page d'accueil ie qu'après le clique sur le bouton validé les annonces s'affichent en fonction des valeurs des champs rempli.
Dès qu'on passe à la page suivante, les annonces s'affichent comme si aucun champs n'avait été coché dans le formulaire de tri.
Voici ma fonction de pagination:
Désolé, de n'avoir pu faire plus court.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 <?php function pagination($current_page, $nb_pages, $link='?page=%d', $around=3, $firstlast=1) { $pagination = ''; $link = preg_replace('`%([^d])`', '%%$1', $link); if ( !preg_match('`(?<!%)%d`', $link) ) $link .= '%d'; if ( $nb_pages > 1 ) { // Lien précédent if ( $current_page > 1 ) $pagination .= '<a class="prevnext" href="'.sprintf($link, $current_page-1).'" title="Page précédente">« Précédent</a>'; else $pagination .= '<span class="prevnext disabled">« Précédent</span>'; // Lien(s) début for ( $i=1 ; $i<=$firstlast ; $i++ ) { $pagination .= ' '; $pagination .= ($current_page==$i) ? '<span class="current">'.$i.'</span>' : '<a href="'.sprintf($link, $i).'">'.$i.'</a>'; } // ... après pages début ? if ( ($current_page-$around) > $firstlast+1 ) $pagination .= ' …'; // On boucle autour de la page courante $start = ($current_page-$around)>$firstlast ? $current_page-$around : $firstlast+1; $end = ($current_page+$around)<=($nb_pages-$firstlast) ? $current_page+$around : $nb_pages-$firstlast; for ( $i=$start ; $i<=$end ; $i++ ) { $pagination .= ' '; if ( $i==$current_page ) $pagination .= '<span class="current">'.$i.'</span>'; else $pagination .= '<a href="'.sprintf($link, $i).'">'.$i.'</a>'; } // ... avant page nb_pages ? if ( ($current_page+$around) < $nb_pages-$firstlast ) $pagination .= ' …'; // Lien(s) fin $start = $nb_pages-$firstlast+1; if( $start <= $firstlast ) $start = $firstlast+1; for ( $i=$start ; $i<=$nb_pages ; $i++ ) { $pagination .= ' '; $pagination .= ($current_page==$i) ? '<span class="current">'.$i.'</span>' : '<a href="'.sprintf($link, $i).'">'.$i.'</a>'; } // Lien suivant if ( $current_page < $nb_pages ) $pagination .= ' <a class="prevnext" href="'.sprintf($link, ($current_page+1)).'" title="Page suivante">Suivant »</a>'; else $pagination .= ' <span class="prevnext disabled">Suivant »</span>'; } if($current_page != 1){ if( $_GET['page'] > $nb_pages){ ?> <script type="text/javascript"> <!-- location="index.php?page=1"; //--> </script> <?php } } return $pagination; } ?>
Merci d'avance à ceux qui voudront m'apporter leur lumière.
Partager