pagination des résultats d'une requête
Posté : 16 mars 2007, 17:33
Bonjour,
j'utilise un code recopiè sur un site pour faire de la pagination.Le souci c'est que les liens me revoient toujours à la page courante.Et cette page n'affiche pas le nombre d'enregistrement souhaité(tout le résultat est affiché).Je me demande si c'est parceque dans ma requête je fais une jointure ?
Voilà le code copié en question.
Je vous remercie de votre aide.
j'utilise un code recopiè sur un site pour faire de la pagination.Le souci c'est que les liens me revoient toujours à la page courante.Et cette page n'affiche pas le nombre d'enregistrement souhaité(tout le résultat est affiché).Je me demande si c'est parceque dans ma requête je fais une jointure ?
Voilà le code copié en question.
Code : Tout sélectionner
// Pagination générique d'un listing
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);
echo "<center><table>"; $i=0;
while($val=mysql_fetch_array($res)) { $i++;
echo "<tr class=ligne".($i%2).">
<td>".$val["champ1"]."</td>
<td>".$val["champ2"]."</td>
</tr>";
}
echo "</table><br />".$pagine."</center><br /><br />";
?>