captain_torche
lundi 17 avril 2006 à 09:36
Bon, on va tenter de faire simple

Tu commences par définir le numéro de ta page (s'il n'est pas précisé en GET, alors on est sur la page 1, sinon, on est sur la page précisée) :
CODE
if(!isset($_GET['page']) || $_GET['page'] < 2)
$page = 1;
else
$page = $_GET['page'];
On définit ensuite le nombre de résultats que l'on veut voir affichés par page :
CODE
$nombre_resultats = 30;
On détermine ensuite l'index du premier résultat que l'on veut : sur la première page, ce sera zéro, sur la seconde 30, sur la troisième 60, etc.
CODE
$debut = ($page-1)*$nombre_resultats;
Il ne reste plus qu'à effectuer la requête :
SQL
SELECT SQL_CALC_FOUND_ROWS * FROM ta_table ORDER BY Date DESC LIMIT $debut, $nombre_resultats
Avec une petite particularité, le
SQL_CALC_FOUND_ROWS,
qui permettra de connaître le nombre total de résultats qu'aurait retourné la requête, sans utiliser de limite.
Tu exploites bien sûr les résultats de la requête comme tu l'entends.
On va donc par la suite, déterminer le nombre d'entrées totales, correspondant à ta requête :
CODE
$num_rows = mysql_result(mysql_query("SELECT FOUND_ROWS()"), 0);
On a par conséquent la variable $num_rows, qui contient le nombre TOTAL de lignes pour ta requête.
Il ne reste plus qu'à afficher éventuellement les 'page précédente', et 'page suivante' :
CODE
if($_GET['page'] != 1)
echo '<a href="page.php?page='.$_GET['page']-1.'">Page précédente</a>';
if($page*$nombre_resultats < $num_rows)
echo '<a href="page.php?page='.$_GET['page']+1.'">Page suivante</a>';
J'éditerai sans doute par la suite, pour expliquer comment gérer les (page 1, page 2, etc).
Edit : Je viens de rédiger cet article :
Gestion de la pagination.