文章是重點是講php中的分頁原理,同時我們是利用一個實現來講解如何在php中實現分頁,這個就是基於自己寫的留方板程序了,有需要的朋友可以參考一下,很適合於初學者哦。
分頁的關鍵問題其實在於Mysql的一個關鍵字limite這個關鍵字後邊跟的兩個數字,第一個是需要記錄的開始行數,第二個數字是從這個開始行數後取得幾行記錄——這一點大家不要誤以為是從第幾行開始到第幾行結束,相差很遠的。
看看我們index.php的第19行:
代碼如下 復制代碼$recordSql = $sql. ” LIMIT “.$page*$pagesize.”,”.$pagesize;
其中變量$page的判斷在程序的第8行和第9行得到的:
代碼如下 復制代碼if(isset($_GET['page'])&&$_GET['page']!=”) $page=$_GET['page'];
else $page=0;
當然大家也看到了$_GET['page']變量這個下文會說到。
變量$pagesize我們在第7行自己定義的,也就是每頁顯示多少條記錄,我們定義的是10條。當變量$page=0的時候我們語句最終會是這樣的:
代碼如下 復制代碼 $recordSql = "SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert就是從0條記錄開始取得10個記錄結果——這個是包括第0條記錄的;
當$page=1的時候呢?可想而知了——這個時候$page*$pagesize=10,當然是從……不說了,再說就羅嗦了。
還有需要說的是,為什麼我們要在取得總行數之後才加上這個limit呢,很簡單嘛,如果我們在取得結果記錄數的時候就加上這個limit,我們總行數永遠不會大於10,因為加上之後他最多返回的記錄數就是10啊兄弟。——這個顯然不符合實際情況。所以我們在執行了:
代碼如下 復制代碼 mysql_num_rows(mysql_query($sql));取得總記錄數,之後才加上limit關鍵字的。
好了我們已經取得了總記錄數,設置了每頁顯示的記錄數10,現在我們需要的就只有總頁數了,這個小學的問題我就不說了吧?當然是總記錄數除以每頁顯示的數就是總頁數了——當然也有除不盡的時候,例如總記錄數11每頁顯示10個,我們需要分幾頁呢?當然是兩頁呢,怎麼才能讓11/10=2呢?——顯然是錯誤的,但是實際生活就這樣並不是完美的數學。使用ceil函數啊,這個上一章也說過了,不說了。
看看我們現在有什麼了啊:
代碼如下 復制代碼 總記錄數,$numRecord = mysql_num_rows(mysql_query($sql));我們什麼都不缺了,就差如何顯示“上一頁下一頁”了,很簡單,兩個判斷就搞定了,看index.php的159-163行:
第160行:
代碼如下 復制代碼 if($page>0) echo "<a href=index.php?page=".($page-1).">上一頁|</a>" ;如果變量$page>0的話,也就是當前的頁碼大於0說明有上一頁,那麼就顯示“上一頁”的鏈接,這個鏈接裡面的$page需要減一,例如當前頁是2,那麼上一頁當然是1了是不是,當我們點擊上一頁的時候,隨著這個鏈接將會把page=1傳遞過去,這種依靠鏈接傳遞變量的方式就是get方法。 這就回到了程序8行9行進行處理了。
在161行,我們做的判斷是,如果當前頁數小於總記錄數-1——因為我們的頁碼是從0開始的,所以總記錄數要減一進行判斷才符合實際。如果這個判斷成立,說明還有下一頁,下一頁的時候$page當然要加一了。
好了整個分頁就是這樣了,只要記住,如何取得總記錄數,如何為sql語句加上limit關鍵字,如何判斷顯示上下頁,一切都ok了
完整的代碼
代碼如下 復制代碼$pagesize = 10;//每一頁顯示多少留言記錄
if(isset($_GET['page'])&&$_GET['page']!='') $page=$_GET['page'];
else $page=0;
$sql = "SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert
FROM post a
LEFT JOIN revert c ON ( a.id = c.post_id ) , guest b
WHERE a.guest_id = b.id
ORDER BY a.id DESC";
$numRecord = mysql_num_rows(mysql_query($sql));
$totalpage = ceil($numRecord/$pagesize);
$recordSql = $sql. " LIMIT ".$page*$pagesize.",".$pagesize;
$result = mysql_query($recordSql);
<table width="800" border="0" align="center" bgcolor="#fefefe">
<?php
while($rs=mysql_fetch_object($result)){
?>
<tr>
<td class="tdhx">留言人:<?php echo $rs->name?> |Email:<?php echo $rs->email?>|QQ:<?php echo $rs->qq?>|留言時間:<?php echo date("Y-m-d H:i:s",$rs->post_time+8*3600)?></td>
</tr>
<?php
if(isset($_SESSION['login'])&&$_SESSION['login']){
?>
<tr>
<td class="tdhx"><a href="revert.php?id=<?php echo $rs->id?>">回復</a> | <a href="delete.php?id=<?php echo $rs->id?>">刪除</a></td>
</tr>
<?php
}
?>
<tr>
<td>留言內容:<?php echo nl2br(htmlspecialchars($rs->post))?><br/>
<font color="Red">
回復內容:<?php echo nl2br(htmlspecialchars($rs->revert))?>[<?php if($rs->revert_time!="") echo date("Y-m-d H:i:s",$rs->revert_time+8*3600)?> ]
</font>
</td>
</tr>
<tr><td height="3px" bgcolor="##FF6600"></td></tr>
<?php
}
?>
</table>
<table width="800" border="0" align="center" bgcolor="#B1C3D9">
<tr>
<td >
<?php
if($page>0) echo "<a href='index.php?page=".($page-1)."'>上一頁|</a>" ;
if($page<$totalpage-1) echo "<a href='index.php?page=".($page+1)."'>下一頁</a>" ;
?></td>
</tr>
</table>