Cette petite fonction permet de gérer entièrement la pagination d'un listing. Je pense que l'exemple en bas et les commentaires du code sont suffisamment parlants
function pagine( &$sql // Elément commun de requête : "FROM..." auquel sera ajouté le "LIMIT..." ,$mpp // Nombre max de lignes par page ,$query // Elément de querystring indiquant le n° de page ,$url // URL de la page ,$long=5 // Nombre max de pages avant et après la page courante ) { // Pour construire les liens, regarde si $url contient déjà un ? $t = (strpos($url,"?"))?"&":"?"; // Nombre total d'enregistrements retournés $res = mysql_query("SELECT count(*) ".$sql); $nbres = mysql_result($res,0,0); // Calcul du nombre de pages $nbpage = ceil($nbres/$mpp); // La page courante est $p=@$_GET[$query]; if(!$p) $p=1; if($p>$nbpage) $p = $nbpage; // Longueur de la liste de pages $deb = max(1,$p-$long); $fin = min($nbpage,$p+$long); // Construction de la liste de pages $pagine = ""; if($nbpage>1) { for($i=$deb;$i<=$fin;$i++) { // Page courante ? if($i==$p) $pagine.="<font color=red><strong> ".$i." </strong></font>"; // Page 1 > lien sans query elseif($i==1) $pagine.="<A href='".$url."'> ".$i." </A>"; // Autre page -> lien avec query else $pagine.="<A href='".$url.$t.$query."=".$i."'> ".$i." </A>"; } if($pagine) $pagine = " Page".$pagine; // Premier, précédent if($pagine&&($p>1)) { if($p==2) $pagine ="<A href='".$url."'> << </A>".$pagine; else $pagine ="<A href='".$url.$t.$query."=".($p-1)."'> << </A>".$pagine; if($p>2) $pagine ="<A href='".$url."'> |< </A>".$pagine; } // Suivant, dernier if($pagine&&($p<$nbpage)) { $pagine.="<A href='".$url.$t.$query."=".($p+1)."'> >> </A>"; if($p<$nbpage-1) $pagine.="<A href='".$url.$t.$query."=".($nbpage)."'> >| </A>"; } // Modification de la requête $sql .= " LIMIT ".(($p-1)*$mpp).",".$mpp; } return $pagine; }
// Exemple d'appel
$SQL = "FROM matable WHERE champ1='critere' ORDER BY champ2 DESC"; $pagine = pagine($SQL,20,"p","index.php"); $res = mysql_query("SELECT * ".$SQL);
Bonjour,
j'ai utilisé ce code dans ma page.Mais lorsque je souhaite afficher duex enregistrements par page, j'ai tous les enregistrements affichés.Toutefois les liens de pagination apparaissent mais dirige toujours vers la page courante.
Comment faire?
Pour participer, il faut d'abord vous identifier !