通常情況下,一個頁面加載大量的數據時,數據不可能同時顯示出來。這時候,比較常用的方法就是滾動條和分頁。看過電子書的孩子都知道,電子書那麼多字,一個手機或pad的屏幕是無法全部顯示的,開玩笑,一本幾兆的書就好幾百萬字,一下子放到幾寸的屏幕上,不得亮瞎你的眼。所以我們都是下滑使文字進行滾動或翻頁。這篇博文就用來分享一下php的分頁技術。
首先獲取數據庫中某表的數據,輸出到網頁上,然後再進行分頁顯示。一句話就講明白了,但具體怎麼分頁的,請看代碼。
<?php header("content-type:text/html;charset=utf-8"); //連接mysql數據庫 $conn=mysql_connect("localhost","",""); //選擇數據庫 mysql_select_db("test"); //設置客戶端和連接字符集 mysql_query("set names utf8"); //limit要求參數 $length=15; $pagenum=@$_GET['page']?$_GET['page']:1; //數據總行數 $sqltot="select count(*) from t1"; $arrtot=mysql_fetch_row(mysql_query($sqltot)); $pagetot=ceil($arrtot[0]/$length); //限制頁數 if($pagenum>=$pagetot){ $pagenum=$pagetot; } $offset=($pagenum-1)*$length; //從數據庫獲取數據 $sql="select * from t1 order by id limit {$offset},{$length}"; $result=mysql_query($sql); echo "<h1>用戶信息表</h1>"; echo "<table width='700px' border='1px'>"; while($row=mysql_fetch_assoc($result)){ echo "<tr>"; echo "<td>{$row['id']}</td>"; echo "<td>{$row['username']}</td>"; echo "<td>{$row['password']}</td>"; echo "</tr>"; } echo "</table>"; //計算上一頁和下一頁 $prevpage=$pagenum-1; $nextpage=$pagenum+1; echo "<h2><a href='index.php?page={$prevpage}'>上一頁</a><a href='index.php?page={$nextpage}'>下一頁</a></h2>"; //釋放連接資源 mysql_close($conn); ?>
$sql="select * from table limit m,n";limit後面的兩個參數分別是起始點與偏移量。m可以不寫,自動默認為0.表示限制獲取的記錄從m開始到m+n結束。通過將變量作為參數傳入,可以靈活的控制每頁的顯示數量。
翻頁的時候,需要添加兩個超鏈接,鏈接地址中添加$page和$prevpage,$nextpage變量,通過$prevpage和$nextpage的變化,讓每頁顯示的數據不同。
但是僅僅做到這兩點,只能保證分頁顯示成功,一旦頁數遞增到數據所在范圍,就會發生沒有數據,但可以繼續翻頁的結果。所以,為了完善分頁顯示,還必須限制翻頁的頁數。頁數=總記錄/單頁顯示記錄。然後進一取整,用ceil()函數就搞定。不過,在獲取到記錄集之前就要進行限制,也就必須獲取總記錄數。這裡推薦的比較好的方法就是count(*)獲取總行數,然後用mysql_fetch_row將值挖出來。返回後的數組,第一個值就是總記錄值。可以邊看代碼邊理解。取得最大頁數之後,一個if語句進行判斷一下,就可以做到頁數的限制,保證了翻到數據的最後一頁就翻不過去了。
最後一點提的就是@
$pagenum=@$_GET['page']?$_GET['page']:1;在這個三元運算前面加@是為了忽略掉php的Notice。因為$page屬於不確定的索引。它到了代碼最後的超鏈接才排上用場。當然,還有很多方法可以忽略掉警告,比如修改php的配置文件。這就看個人喜好了。不必糾結與一個@。
上兩張分頁顯示的圖(美化和數據忽略不記,實例而以)