Codecourse

Səhifələmə

Tutaq ki verilənlər bazasında country adlı cədvəlimiz var:

id country capital population
1 Azerbaijan Baku 9.6
2 Turkey Ankara 77
3 Kazakhstan Astana 17
4 Georgia Tbilisi 3.7
5 Iran Tehran 78
6 Russia Moscow 143
7 Israel Jerusalem 8.2
8 Lithuania Vilnuis 2.8
9 Latvia Riga 1.9
10 Estonia Tallinn 1.3
11 The United States of America Washington, D.C. 321
12 Germany Berlin 81
13 Italy Rome 60
14 Austria Vienna 8.6
15 Albania Tirana 3

country cədvəlində 15 sətir mövcuddur və bütün məlumatları bir səhifədə göstərmək olar. Lakin bir anlığa təsəvvür edək ki, sözügedən cədvəldə 500 sətir var. Belə olan halda bütün məlumatları bir səhifədə göstərmək səhifənin gec yüklənməsi, həmçinin uzun olması ilə nəticələnəcək. Məhz bu zaman səhifələmə köməyimizə gəlir.

Beləliklə, verilənlər bazasındakı cədvəldə 15 sətir mövcuddur. Biz onları hər bir səhifədə 4 məlumat olmaqla saytda göstərməliyik.

Verilənlər bazasındakı cədvəldən istənilən mövqedən istənilən sayda məlumatı ekrana çıxarmaq üçün LIMIT operatorundan istifadə etmək lazımdır. LIMIT operatorunun sintaksisi aşağıdakı kimidir:

LIMIT [offset], row_count

SELECT *  FROM country LIMIT 0, 4

Bu sorğu cədvəldəki ilk 4 məlumatı geri qaytaracaq. Qeyd edim ki, nömrələmə 0-dan başlanır. Yəni, LIMIT 0, 4 ilk 4 sətri (0-3) ekrana çıxarır. Belə olan halda ikinci və üçüncü səhifələr üçün sorğu aşağıdakı kimi olacaq:

#ikinci səhifə
SELECT *  FROM country LIMIT 4, 4
#üçüncü səhifə
SELECT *  FROM country LIMIT 8, 4

LIMIT operatoru üçün offset parametrinin qiymətini aşağıdakı kimi hesablayırıq:

$start = ($page - 1) * $per_page;

$page — istifadəçinin daxil olduğu səhifə

Bir səhifədə göstəriləcək məlumatların sayını $per_page dəyişəninə mənimsədirik:

$per_page = 4;

Həmçinin səhifələrin sayını tapmaq lazımdır. Bundan ötrü cədvəldəki bütün məlumatların sayını bir səhifədə göstəriləcək məlumatların sayına bölmək və nəticəni tam ədədə yuvarlaqlaşdırmaq (ceil() funksiyası) lazımdır. İlk əvvəl cədvəldəki bütün məlumatların sayını tapaq:

$query = "SELECT * FROM country";
$res = mysqli_query($link, $query);
$total = mysqli_num_rows($res);

İndi isə səhifələrin sayını tapaq:

$num_pages = ceil($total / $per_page);

Sonda dövrdən istifadə etməklə linkləri ekrana çıxaraq:

for($i = 1; $i <= $num_pages; $i++) {
 if($i == $page) {
   echo $i." "."\n";
 } else {
   echo "<a href='{$_SERVER['PHP_SELF']}?page=$i'> ".$i."</a>\n";
 }
}

Yekun:

$per_page = 4; // Bir səhifədəki məlumatların sayı

// Səhifənin nömrəsini GET metodu ilə qəbul edirik
if(isset($_GET['page'])) {
   $page = abs((int)$_GET['page']);
} else {
   $page = 1;
}
	
if(empty($page)) $page = 1;
	
$start = ($page - 1) * $per_page;
	
$query = "SELECT * FROM country LIMIT $start, $per_page";
$res = mysqli_query($link, $query);

while(list($id, $country, $capital, $population) = mysqli_fetch_array($res)) {
   echo $id.". ".$country." ".$capital." ".$population."<br />";
}
	
$query = "SELECT * FROM country";
$res = mysqli_query($link, $query);
$total = mysqli_num_rows($res); // Cədvəldəki bütün məlumatların sayı
	
$num_pages = ceil($total / $per_page); // Səhifələrin sayını təyin edirik
	
if($page > $num_pages) die('Belə səhifə yoxdur.');
	
for($i = 1; $i <= $num_pages; $i++) {
   if($i == $page) {
      echo $i." "."\n";
    } else {
       echo "<a href='{$_SERVER['PHP_SELF']}?page=$i'> ".$i."</a>\n";
    }
}

Növbəti dərsi seçib keçid düyməsinə sıxın: