Witam
Chciałbym przedstawić Wam dosyć proste stronicowanie/podział na strony wyników pobranych z bazy danych. Całość jest dosyć krótka i mam nadzieję, że przyda się szczególnie początkującym programistom
Najpierw wkleję cały kod, a później go omówię:
Kod PHP:
$perPage = 20;
if (is_numeric($_REQUEST['page'])) {
$page = (int) $_REQUEST['page'];
if ($page < 1) {
$page = 1;
}
} else {
$page = 1;
}
$start = ($page - 1) * $perPage;
$query = 'SELECT [fields] FROM [table] ' .
"WHERE [condition] LIMIT $start, $perPage";
$result = mysql_query($query);
while ($record = mysql_fetch_srray($result)) {
// wyswietlanie wpisow
}
$prev = $page - 1;
$next = $page + 1;
$prevLink = $_SERVER['PHP_SELF'] . '?page=' . $prev;
$nextLink = $_SERVER['PHP_SELF'] . '?page=' . $next;
echo "<p align='center'>",
"<a href='$prevLink'>";
"Previous Page</a> | ",
"<a href='$nextLink'>",
"Next Page</a></p>";
I to już wszystko! Cały kod. Właściwie wystarczy go wkleić i zmienić ze 3 rzeczy i działa nam dzielenie wyników z bazy danych na strony. Poniżej krótkie omowienie:
Ta część odpowiada za ilość wyświetlanych wyników
Kod:
if (is_numeric($_REQUEST['page'])) {
$page = (int) $_REQUEST['page'];
if ($page < 1) {
$page = 1;
}
} else {
$page = 1;
}
Ta część odpowiada za odebranie numeru strony. Jeżeli nie ma nic, to znaczy, że jest 1. jesli jest poniżej 1, to też jest 1. To tak dosyć łopatologicznie
Kod:
$start = ($page - 1) * $perPage;
Ta część odpowiada za to, od ktorego wpisu będą pobierane rekordy z bazy danych. Poniżej wstawimy tą zmienną przy pobieraniu wpisów z bazy danych. W tym przypadku od numeru strony odejmujemy 1. Czyli gdy strona = 1, to mnożymy 0 razy ilość wyświetlanych rekordów czyli w tym przypadku 10. 0*10 = 0, czyli pobieramy wpisy od id=0. Gdy jesteśmy na stronie 2, wtedy równianie wygląda tak: (2 - 1) * 10 = 10, czyli pobieramy wpisy od id=10. Chyba zrozumiałe
Kod:
$query = 'SELECT [fields] FROM [table] ' . "WHERE [condition] LIMIT $start, $perPage";
$result = mysql_query($query);
while ($record = mysql_fetch_srray($result)) {
// wyswietlanie wpisow
}
Pobieranie wpisów, z tabeli [table], pod jakimś warunkiem. To modyfikujemy do woli. natomiast dalsza część (LIMIT $start, $perPage) jest związana z poprzednią linijką. $start oznacza od którego wpisu zaczynamy pobieranie rekordów. $perPage oznacza ile rekordów pobieramy.
Dla page=2 pobieramy 10 wpisów od dziesiątego zaczynając. Czyli pobieramy wpis 11, 12, 13, 14...20.
Dalej mamy wyświetlanie wpisów. I to miejsce też modyfikujemy na swoje potrzeby.
Kod:
$prev = $page - 1;
$next = $page + 1;
Zmienne, dodające lub odejmujące 1 od aktualnej strony. Wykorzystywane przy odnośnikach, które są niżej:
Kod:
$prevLink = $_SERVER['PHP_SELF'] . '?page=' . $prev;
$nextLink = $_SERVER['PHP_SELF'] . '?page=' . $next;
gdzie $_SERVER['PHP_SELF'] to adres strony. Linki mogą wyglądać tak:
Kod:
<a href=\"index.php?page=".$prev."\">Poprzednia</a>
<a href=\"index.php?page=".$next."\">Nastepna</a>
Na końcu adresu dostawiamy ?page= i tutaj odejmujemy lub dodajemy 1, przechodząc na stronę następną lub poprzednią. To zaś spowoduję zmiane wartości page na początku działania kodu i dzięki temu będziemy wyświetlali inną porcję wpisów
PS.Tutorial umieściłem też na innym forum. Żeby nie było, że kopiowany