Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer
Artiklar > PHP

Simpel Paging

Php paging.

Hejsan, jag har beslutat att skriva en artikel om hur man kan bygga en enkel paging i php och mysql.

Introduktion.

Vad är paging?

Paging är ett system som låter dig skapa en bättre överblick av tex. produkter i din databas, istället för att lista kanske 100 produkter på en gång, så kan du välja att visa allt mellan 1-100 på en sida. Säg att du har 100 produkter, och du väljer att visa 10st per sida, så kommer ditt paging system att skriva ut länkar längst ner / högst upp/både och, från 1-10 (alltså 10x10 = 100 poster).

Då börjar vi!

Först och främst, TABELL representerar din tabell och COL representerar vilken kollumn du vill kolla mot.

Först och främst tar jag för givet att du vet hur man ansluter till din databas, och att du redan gjort detta.

 


//Antal rader per sida
$rowsperpage = 10;

//Sidan vi startar ifrån, dvs första sidan
$pageNum = 1;

//Om våran querystring page, har något värde så ändrar vi sidan man är på till värdet page har.
if(isset($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// Räknar ut vilka poster, lr rättare sagt vart vi ska börja hämta ut poster ifrån.
$offset = ($pageNum - 1) * $rowsPerPage;

// SQL koden som hämtar ut rätt rader ur databasen
$query = "SELECT COL FROM TABELL LIMIT $offset, $rowsperpage";

// Nu kör vi sqlkoden mot databasen om ett fel uppstår, så "dör" queryn.
$result = mysql_query($query) or die('Error, query failed');

// Dags att skriva ut datan.
while($row = mysql_fetch_array($result))
{
   echo $row['COL'] . '<br>';
}

Nå var det allt? Nej, Nu har vi bara sett till att rätt poster från databasen hämtas ut, men vi vill ju gärna kunna navigera utan att manuellt skriva in sidonumret i querystringen eller hur? Därför är det nu dags att bygga i ordning den delen.


// ... förra kodstycke

// Hur många rader har vi totallt i databasen?
$query   = "SELECT COUNT(val) AS numrows FROM randoms";
$result  = mysql_query($query) or die('Error, query failed');
$row     = mysql_fetch_array($result, MYSQL_ASSOC);
$numrows = $row['numrows'];

// Hur många sidor blir alla dem raderna?
$maxPAge = ceil($numrows/$rowsPerPage);


// Skriver ut länken för varje sidan.
// För att ni smidigare skall kunna få det at funka på en sida döpt till vad som helst, så skapar vi en variabel som heter $self, denna variablen innehåller sidans namn, tex forumtrad.php.
$self = $_SERVER['PHP_Self'];
$nav  = '';

for($page = 1; $page <= $maxPage; $page++)
{
   if ($page == $pageNum)
   {
      $nav .= " $page "; // Gör inte "nuvarande" sida till en länk, känns lite overkill eller hur?
   }
   else
   {
      $nav .= " <a href=\"$self?page=$page\">
$page</a> "; // Skriver ut alla andra sidor som länkar.
   }
}

 

Det var allt som egentlige behövs för en fungerande paging. Men, ni har antagligen sett massa paging system som har <föregående 1 2 3 nästa >, så vi tar och skapar en sådan också :]


// ... kod från förra kodblock

// Skapar förra/första nästa/sista länkar

if ($pageNum > 1)
{
   $page = $pagenum - 1;
 
   $prev  = " <a href=\"$self?page=$page\">[Prev]</a>
";

   $first = " <a href=\"$self?page=1\">[First
Page]</a> ";
}
else
{
   $prev  = '&nbsp;'; // Vi är redan på första sidan, alltså skall inte "förra" skrivas ut.
   $first = '&nbsp;'; // Samma sak gäller första
}
if ($pageNum < $maxPage)
{
   $page = $pageNum + 1;
   $next = " <a href=\"$self?page=$page\">[Next]</a>
";

   $last = " <a href=\"$self?page=$maxpage\">[Last
Page]</a> ";
}
else
{
   $next = '&nbsp;'; // Vi är på sista sidan, ingen nästa länk skrivs ut.
   $last = '&nbsp;'; // inte heller sista sidan länken
}
// Skriver ut navigations länkarna
echo $first . $prev . $nav . $next . $last;

 

Summering/Slutord

Det finns dock ett problem, säg att du skulle komma upp i 500 eller mer sidor, då kommer koden att skriva ut totalt 502 länkar som absoluta minimum, och det ser kanske inte så snyggt ut eller hur? Kommer inte ta upp hur man fixar det i denna artiklen, men det kan vara bra för er att vara medvetna om denna "bug" eller vad man skall kalla det.

Skapades: 2009-05-22 18:09:39
Skribent: Hultin
Lästs 1813 gånger
Betyg: 5 (artikeln har endast 4 röster, det krävs minst 5 för ett betyg)

Kommentarer

Ingen har kommenterat denna artikel än.

© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy