Paging (10 pr. side) i PHP & MySQL
En gennemgang af et script til at vise x antal poster pr. side.
Hvis man skal præsentere en masse poster fra en database, f.eks. indlæg i en gæstebog kan det præsenteres mere overskueligt ved at opdele sin poster på flere sider. Jeg vil i det følgende gennemgå et script der gør netop dette. Scriptet er løbende kommenteret. Kommentarerne til scriptet vil være indrammet af /*…*/
<?php /* Vi connecter til databasen */ $connection = mysql_pconnect("host", "user", "pass"); mysql_select_db("database");
/* Antallet af poster vi ønsker vist på hver side */ $pr_side = 10;
/* Vi tæller antallet af poster i tabellen husk at ændre ‘table’ til dit eget tabelnavn */ $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM table"),0) or die(mysql_error());
/* Hvis visfra-variablen ikke findes i URL-feltet og den ikke er et nummer og den er større end antallet i databasen, så sættes den til 0, ellers sættes den til værdien fra URL feltet */ $vis_fra = (isset($_GET["visfra"]) && is_numeric($_GET["visfra"]) && $_GET["visfra"] < $antal) ? $_GET["visfra"] : 0;
/* Vi laver et database udtræk med limit, så den kun hiver det rigtige antal ud fra tabellen, husk at ændre ‘table’ til dit eget tabelnavn */ $query = mysql_query ("SELECT * FROM table ORDER BY id DESC limit $vis_fra, $pr_side") or die(mysql_error()); /* Vi kører en while og udskriver data, det jeg har sat på er blot et eksempel */ while ($row = mysql_fetch_array($query)) { echo $row['id']."<br>"; } echo "<hr />";
/* Der undersøges om der skal udskrives et ”forrige side”-link, er dette tilfældet udskrives linket */ if ($vis_fra > 0) { $back= $vis_fra - $pr_side; echo "<a href='$_SERVER[PHP_SELF]?visfra=$back'>Forrige</a> "; } $page = 1;
/* Alle siderne udskrives så man med et klik kan få resultaterne fra fx 90-100 */ for ($start = 0; $antal > $start; $start = $start + $pr_side) { if($vis_fra != $page * $pr_side - $pr_side) { echo "<a href='$_SERVER[PHP_SELF]?visfra=$start'>$page</a> "; } else { echo $page." "; } $page++; }
/* Der undersøges om der skal udskrives et ”næste side”-link, er dette tilfældet udskrives linket */ if ($vis_fra < $antal - $pr_side) { $next = $vis_fra + $pr_side; echo " <a href='$_SERVER[PHP_SELF]?visfra=$next'>Næste</a>"; } ?>
|
Stor tak til Alexander Holm Viborg, som har skrevet denne artikel. Du kan skrive til Alexander på
ahv@it.dk
| Tilføjet af Simon Glue den 13-02-2004 - Hits: 7536 |
   |