close

http://twpug.net/modules/smartsection/item.php?itemid=42

--

MySQL 資料庫的分頁處理
由 Kiang 發佈於 02月25日 (10015 次瀏覽)
單純搭配 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. 如何重複利用這樣的程式碼?

有了答案不妨透過討論區與大家分享:
http://twpug.net/modules/newbb/viewforum.php?forum=16

最後,程式的實做有太多種方式與可能性,千萬別以為只能、或是應該得這麼做。 :)

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 dizzy03 的頭像
    dizzy03

    碎碎念

    dizzy03 發表在 痞客邦 留言(0) 人氣()