單純搭配 MySQL 資料庫進行增、刪、改、查功能,對於一般剛開始學習的朋友已經算是一個里程碑,因為可以延伸出相當多的應用;只是當資料筆數持續成長時,看著畫面越拉越長似乎不是辦法,這時候就可以嘗試進行分頁功能。
在設計分頁功能時,第一個會想到的問題是要分幾頁?而分頁的數量是基於符合條件資料總數計算出來,因此我們先嘗試計算這個數字:
mysql_connect("host","username","pass");
mysql_select_db("dbname");
$result1 = mysql_query('SELECT count(*) FROM table');
$data1 = mysql_fetch_row($result1);
// $data1[0] 就是資料總數
接著假定每頁要顯示 20 個項目,計算總頁數:
$per = 20; //每頁顯示項目數量
$pages = ceil($data1[0]/$per); //總頁數
知道總頁數之後就可以產生相對頁數的連結,像是這樣:
for($i=1;$i<=$pages;$i++) {
echo '<a href="?page='.$i.'">' . $i . '</a>';
}
產生的連結是透過網址傳遞希望瀏覽的頁面數字,我們可以透過全域變數取得;但是使用者提供的資料並非絕對正確,而且可能含有惡意的參數,因此需要增加一些過濾的手續:
if(!isset($_GET["page"])){
$page=1; //設定起始頁
} else {
$page = intval($_GET["page"]); //確認頁數只能夠是數值資料
$page = ($page > 0) ? $page : 1; //確認頁數大於零
$page = ($pages > $page) ? $page : $pages; //確認使用者沒有輸入太神奇的數字
}
現在程式流程已經可以知道使用者位於哪個頁面,接著計算該頁面需要出現哪些資料?因為剛剛已經設定了每頁顯示 20 筆資料,因此我們只需要計算這 20 筆資料要從哪裡開始:
$start = ($page-1)*$per; //每頁起始資料序號
因為 MySQL 資料庫的第一筆資料序號為零,因此第一頁的資料是從第零筆開始。
到這裡需要的參數都準備好了,我們就正式到資料庫去取得所需要的資料,並且將它顯示在畫面上:
$result2 = mysql_query('SELECT * FROM table LIMIT ' . $start . ', ' . $per);
while($data2 = mysql_fetch_row($result2)) {
print_r($data2);
}
這裡有兩個需要注意的地方:
1. 養成習慣,取得需要的欄位就好,不要每次都嘗試用星號(*)取得全部資料
2. 實際的操作中記得先確認有沒有符合條件的資料( mysql_num_rows() ),避免程式空轉或是發生未能預期的錯誤
為了不要模糊焦點,這裡選擇了比較粗糙的方式處理。
一個比較陽春的分頁功能這樣就完成了,下面幾個方向就留給各位去思考、練習:
1. 頁數連結太多時該如何處理?
2. 如何重複利用這樣的程式碼?
|