PHP開發簡單新聞發布系統之簡單分頁功能介紹
分頁顯示是一種非常常見的瀏覽和顯示大量資料的方法,屬於web程式設計中最常處理的事件之一。
所謂分頁顯示,也就是將資料庫中的結果集人為的分成一段一段的來顯示,這裡需要兩個初始的參數:
每頁顯示新聞數量: $limitNews
取得目前的分頁數:$page
由於電腦語言預設從0開始取得記錄
若設定每頁顯示數量為3,$limitNews = 3,
那麼第一頁$page = 1 就會顯示0, 1, 2 三筆記錄
第二頁 $page = 2 就會顯示3, 4, 5 三筆記錄
第三頁 $page = 3 就會顯示6, 7,8 三筆記錄
依此類推。 。 。 。 。 。 。 。 。
設定一個參數$limitFrom 從第幾個資料開始讀取
從上面的規律就可以得到:
$limitFrom = ($page - 1 ) * $limitNews;
就會分別從第0 ,3, 6條開始取得資料。
下一步我們就需要連接資料庫並讀取資料
我們仍然使用前面建立的資料庫名稱test和表名new:
<?php $link = mysqli_connect('localhost','uesrname','password','test'); $sql = "select * from new"; // select * from表示获取全部字段的值 $sqlCount = "select count(*) from new"; //count(*)统计的是结果集的总条数 ?>
透過查詢語句取得資料庫表中的新聞總數$countNews
<?php $retQuery = mysqli_query($link, $sqlCount); //查询数量sql语句 $retCount = mysqli_fetch_array($retQuery); //获取数量 $count = $retCount[0]?$retCount[0]:0; //判断获取的新闻数量 $countNews = $count; ?>
這裡需要給到另一個參數$countPage 總共顯示多少頁
現在就出現另一個問題,如果有10個新聞紀錄,每頁顯示3個紀錄,那剩餘的一條怎麼辦?
我們就要用%取餘來判斷:
<?php $countPage = $countNews%$limitNews; //求余数获取分页数量能否被除尽 if(($countPage) > 0) { //获取的页数有余 $countPage = ceil($countNews/$limitNews); // ceil() 函数向上舍入为最接近的整数,除不尽则取整数+1页, 10个新闻每个页面显示3个,成3个页面,剩余1个单独成1个页面,这样总共有4个页面 } else { $countPage = $countNews/$limitNews; //如果是9个新闻每个页面显示3个,成3个页面 } ?>
#其他參數上一頁$prev,下一頁$next;
在分頁功能中常常會有點選「上一頁」和點選「下一頁」進行跳轉
先說一下PHP程式碼功能實現想法:
上一頁$prev,就是當前頁$page -1 一步一步往前頁跳轉,噹噹前頁$page為第一頁的時候再往前跳轉就為第0頁了,這顯然會出現bug,
這裡我們就需要給它一個設定,噹噹前頁$page為第一頁的時候點擊“上一頁”就設定它顯示為第一頁,不在往前跳轉了。
$prev = ($page - 1 <= 0 )?1:$page-1;
下一頁$next, 就是當前頁$page -1 一步一步往後頁跳轉,問題在於當$page為最後一頁的時候點擊「下一頁」再往後跳轉,
#跟上一頁類似,我們設定它就顯示最後一頁。
$next = ($page + 1 > $countPage)?$countPage:$page+1;
//目前頁數大於總頁數的時候就顯示目前頁。
下面展示頁面程式碼:
<!DOCTYPE html> <html> <head> <meta charset=utf8"> <title>分表页</title> </head> <body> <div> <a href="?page=<?php echo $prev;?>">|上一页</a> <?php for($i=1; $i<=$countPage; $i++):?> <a href="?page=<?php echo $i;?>"><?php echo $i;?></a> <?php endfor;?> <a href="?page=<?php echo $next;?>">|下一页</a> </div> </body> </html>
註解:上面的程式碼使用for迴圈來實作 1,2,3。 。 。 。的頁面效果。