PHP05簡單分頁概念與做法

<概念說明>

第一部份:做出分頁連結
首先要先知道總共有幾筆資料
假設$result是己經用mysql_query查好的結果
$datacount = mysql_num_rows($result);
所以如果資料表有23筆資料
那$datacount的值就會是23;
接著看你一頁要列出幾筆資料,假設一頁十筆
那就要將總資筆數除以10筆,有餘數要無條件進位
這樣才能做出完整的分頁,例如以下這樣
$pagecount = ceil($datacount/10);
所以$pagecount的值是3,是總共要分的頁數
接著是要做連結至各分頁的按鈕
for($i=0;$i<$pagecount;$i++){
echo ‘<a href=”‘.$PHP_SELF.’?pagenode=’.$i.'”> ‘.$i.’ </a>’;
}
$PHP_SELF是要連結到自己
因為$pagecount是3所以在html上會列出以下這樣(假設本頁是xx.php)
<a href=”xx.php?pagenode=0″>0</a>
<a href=”xx.php?pagenode=1″>1</a>;
<a href=”xx.php?pagenode=2″>2</a>;
也就是會有3個按鈕

第二部份:處理分頁
接下來
是要寫當造訪者按下了其中一個按鈕的處理過程
我們要用get來取得pegenode的變數
另外還要給二個範圍的變數,例如1~10,11~20
所以寫法就會像以下這樣
$above = $_GET[“pagenode”]*10+1;
$under = $above+9;
所以假設$pagenode是1,那$above就是11,under就是20
確定好範圍後
就要根據範圍列出資料,例如
while($data= mysql_fetch_row($result)){
$j++;
if($j>$above && $j<=$under){
echo “
“.$j;
print_r($data);
}
}

<實際寫法>

做法1
了解以上的概念說明後,全部寫在一起會像以下這樣
$datacount = mysql_num_rows($result);
$pagecount = ceil($datacount/10);

for($i=0;$i<$pagecount;$i++){
echo ‘<a href=”‘.$PHP_SELF.’?pagenode=’.$i.'”> ‘.$i.'</a> ‘;
}

$above = $_GET[“pagenode”]*10+1;
$under = $above+9;
while($data= mysql_fetch_row($result)){
$j++;
if($j>=$above && $j<=$under){
echo “
“.$j;
}
}

做法2
另外一種做法,是用mysql的語法直接列出想要列出的範圍,如下
$datacount = mysql_num_rows($result);
$pagecount = ceil($datacount/10);
for($i=0;$i<$pagecount;$i++){
echo ‘<a href=”‘.$PHP_SELF.’?pagenode=’.$i.'”> ‘.$i.'</a> ‘;
}

$above = $_GET[“pagenode”]*10;
$result = mysql_query(“select*from tablename LIMIT “.$above.” , 10″);

//$above這裡是開始列出的位數,10是要列出的數量
while($data= mysql_fetch_row($result)){
print_r($data);
}
做法3
若懶得看上面的說明,可直接套用以下改良過的程式碼,
ps:咖啡色字表示必須要由使用者負責
ps:以下是以抓取newb資料表且而且有id這個欄位為例
mysql_connect(“localhost”,”帳號”,”密碼”); //帳密記得要加
mysql_select_db(“資料庫名稱”); //資料名稱也要記得加

//part 1 分頁主程式
//設定一頁要幾筆資料
$inc[“inpnum”]=10;
//計算newb資料表的資料有幾筆
list($datacount) = mysql_fetch_row(mysql_query(“Select count(id) as counter from newb”));
//計算要用到幾頁
$pagecount = ceil($datacount/$inc[“inpnum”]);
//做出分頁用連結
$pagenum = $_GET[“pagenum”];
if($pagenum==””) $pagenum=1;
if($pagenum > 1) $pagenumlink.= ‘<a href=”‘.$PHP_SELF.’?pagenum=’.($pagenum-1).'”>上一頁</a> ‘;
for($i=1;$i<=$pagecount;$i++){
$pagenumlink.='<a href=”‘.$PHP_SELF.’?pagenum=’.$i.'”>’.$i.'</a> ’;
}
if($pagenum < $pagecount) $pagenumlink.= ‘<a href=”‘.$PHP_SELF.’?pagenum=’.($pagenum+1).'”>下一頁</a>’;

//給mysql指令用來限制資料筆數用的
$sqlstartread = ($pagenum-1)*$inc[“inpnum”];
//將$addlimit放在sql指令的後面
$addlimit = “limit “.$sqlstartread.”,”.$inc[“inpnum”];
//part 1 結束

//將newb的資料列出來,但是只抓取部份資料
$result = mysql_query(“select * from newb “.$addlimit);
/*
己經從mysql得到的$result,只要在處理$result即可,這個地方要自己決定
*/

//part 2 找個地方放分頁按鈕
echo $pagenumlink ;
//part 2結束