《PHP中分頁效果的具體實現方案和詳細步驟及源碼》要點:
本文介紹了PHP中分頁效果的具體實現方案和詳細步驟及源碼,希望對您有用。如果有疑問,可以聯系我們。
1 1.分頁效果的實現
1.1 問題
我們經常在瀏覽網站的時候看到過分頁效果,例如你在百度的時候,查詢出來的結果可能成千上萬甚至更多,這時候一頁顯示不下,就需要使用到分頁效果,那么我們如何實現呢?
1.2 方案
分頁功能的核心是通過LIMIT語句,LIMIT的第一個參數是偏移量,第二個參數是每頁顯示的記錄數.
1.3 步驟
第一步,創建標準的PHP文檔.
第二步,通過mysql_connect()方法連接數據庫,在配合上or die語句,連接失敗的時候顯示錯誤編號和錯誤信息.其代碼如下:
<?php
header('content-type:text/html;charset=utf-8');
//連接數據庫
$link=mysql_connect('localhost','root','root') or die('數據庫連接失敗<br/>Error '.mysql_errno().':'.mysql_error());
第三步,設置客戶端的編碼方式UTF8,可以通過兩種方式實現,任選一種即可.其代碼如下:
//設置客戶端編碼方式
mysql_set_charset('UTF8',$link);
//mysql_query("SET NAMES UTF8",$link);
第四步,打開指定的數據庫,通過mysql_select_db()函數實現.其代碼如下:
//打開指定數據庫
mysql_select_db('test',$link) or die('指定數據庫打開失敗');
第五步,通過mysql_query()執行SQL查詢,執行查詢user表的SQL語句,查詢id字段,執行SELECT關鍵字的查詢,成功返回MySQL Result結果集,失敗返回false.其代碼如下:
//執行SQL查詢
$sql='SELECT id FROM user';
$result=mysql_query($sql,$link);
第六步,通過is_resource()判斷$result是否是結果集并且通過mysql_num_rows($result)判斷結果集中記錄數是否大于0,如果有我們通過mysql_num_rows($result)取出結果集的總記錄數;否則輸出沒有記錄并退出.其代碼如下:
if(is_resource($result)&&mysql_num_rows($result)>0){
$totalRows=mysql_num_rows($result);//總記錄數
//釋放結果集
mysql_free_result($result);
}else{
exit('沒有記錄,咋分頁呀!!!');
}
第七步,設置每頁顯示的記錄條數,計算總頁碼數;接著接收頁碼,并且處理頁碼的特殊形式.其代碼如下:
//設置每頁顯示的記錄條數
$pageSize=5;
//得到總頁碼數
$totalPage=ceil($totalRows/$pageSize);
//接收頁碼
$page=$_REQUEST['page']?(int)$_REQUEST['page']:1;
//處理特殊頁碼形式
if($page<0)$page=1;
if($page>=$totalPage)$page=$totalPage;
第八步,計算偏移量,偏移量公式=(當前頁碼-1)*每頁顯示的記錄數.其代碼如下:
//計算偏移量
$offset=($page-1)*$pageSize;
第九步,分頁顯示記錄,執行SQL查詢,帶有分頁的查詢語句.其代碼如下:
//執行SQL查詢
$sql="SELECT id,username,email FROM user LIMIT {$offset},{$pageSize}";
$result=mysql_query($sql,$link);
第九步,判斷是否是結果集,并且結果集中是否有記錄,如果有記錄得到結果集中的記錄形成二維的索引+關聯的形式;否則輸出沒有記錄退出.其代碼如下:
if(is_resource($result)&&mysql_num_rows($result)>0){
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
$rows[]=$row;
}
//釋放結果集
mysql_free_result($result);
//關閉連接
mysql_close($link);
}else{
exit('木有記錄請添加');
}
第十步,輸出頁碼,頁碼形式為首頁 上一頁 頁碼 下一頁 尾頁 總共多少頁,首先設置首頁、上一頁、下一頁、尾頁和總共多少頁的形式.如果當前為第一頁,則首頁和上一頁都是普通文本;如果當前頁是最后一頁,則尾頁和下一頁是普通文本;其代碼如下:
//得到當前執行腳本的文件名
$url = $_SERVER ['PHP_SELF'];
//當前頁為1,首頁是普通文字,否則是超鏈接
$index = ($page == 1) ? "[ 首頁 ]" : "<a href='{$url}?page=1'>[ 首頁 ]</a>";
//當前頁是最后一頁,尾頁是普通文字,否則是超鏈接
$last = ($page == $totalPage) ? "[ 尾頁 ]" : "<a href='{$url}?page={$totalPage}'>[ 尾 頁 ]</a>";
$prevPage=($page>=1)?$page-1:1;
$nextPage=($page>=$totalPage)?$totalPage:$page+1;
////當前頁為1,上一頁是普通文字,否則是超鏈接
$prev = ($page == 1) ? "[ 上一頁 ]" : "<a href='{$url}?page={$prevPage}'>[ 上一頁 ]</a>";
////當前頁是最后一頁,下一頁是普通文字,否則是超鏈接
$next = ($page == $totalPage) ? "[ 下一頁 ]" : "<a href='{$url}?page={$nextPage}'>[ 下一 頁 ]</a>";
$str = "總共{$totalPage}頁/當前是第{$page}頁";
第十一步,通過for循環循環輸出頁碼,設置當前頁無鏈接的情況,拼接最終形成的分頁字符串,其代碼如下:
for($i = 1; $i <= $totalPage; $i ++) {
//當前頁無連接,否則是超鏈接
if ($page == $i) {
$p .= "[{$i}]";
} else {
$p .= "<a href='{$url}?page={$i}'>[{$i}]</a>";
}
}
$pageStr=$str . $index . $prev . $p . $next . $last;
第十二步,顯示分頁之后的數據,通過表格簡單布局,如果有數據則顯示,否則顯示木有記錄,其代碼如下:
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>用戶列表</title>
</head>
<body>
<table width='80%' border='1' bgcolor='#ABCDEF' cellpadding='0' cellspacing='0'>
<tr>
<td>編號</td>
<td>用戶名</td>
<td>郵箱</td>
</tr>
<?php
if(is_array($rows)&&count($rows)>0){
foreach($rows as $user){
?>
<tr>
<td><?php echo $user['id'];?></td>
<td><?php echo $user['username'];?></td>
<td><?php echo $user['email'];?></td>
</tr>
<?php
}
}else{
?>
<tr><td colspan='3'>木有記錄</td></tr>
<?php
}
?>
<tr><td colspan='3'><?php echo $pageStr;?></td></tr>
</table>
</body>
</html>
啟動瀏覽器并且瀏覽該文件,其運行效果如圖-1所示.
圖1
1.4 完整代碼
01_page.php具體代碼實現如下:
<?php
header('content-type:text/html;charset=utf-8');
//連接數據庫
$link=mysql_connect('localhost','root','root') or die('數據庫連接失敗<br/>Error '.mysql_errno().':'.mysql_error());
//設置客戶端編碼方式
mysql_set_charset('UTF8',$link);
//打開指定數據庫
mysql_select_db('test',$link) or die('指定數據庫打開失敗');
//執行SQL查詢
$sql='SELECT id FROM user';
$result=mysql_query($sql,$link);
if(is_resource($result)&&mysql_num_rows($result)>0){
$totalRows=mysql_num_rows($result);//總記錄數
//釋放結果集
mysql_free_result($result);
}else{
exit('沒有記錄,咋分頁呀!!!');
}
//設置每頁顯示的記錄條數
$pageSize=5;
//得到總頁碼數
$totalPage=ceil($totalRows/$pageSize);
//接收頁碼
$page=$_REQUEST['page']?(int)$_REQUEST['page']:1;
//處理特殊頁碼形式
if($page<0)$page=1;
if($page>=$totalPage)$page=$totalPage;
//計算偏移量
$offset=($page-1)*$pageSize;
//執行SQL查詢
$sql="SELECT id,username,email FROM user LIMIT {$offset},{$pageSize}";
$result=mysql_query($sql,$link);
if(is_resource($result)&&mysql_num_rows($result)>0){
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
$rows[]=$row;
}
//釋放結果集
mysql_free_result($result);
//關閉連接
mysql_close($link);
}else{
exit('木有記錄請添加');
}
//得到當前執行腳本的文件名
$url = $_SERVER ['PHP_SELF'];
//當前頁為1,首頁是普通文字,否則是超鏈接
$index = ($page == 1) ? "[ 首頁 ]" : "<a href='{$url}?page=1'>[ 首頁 ]</a>";
//當前頁是最后一頁,尾頁是普通文字,否則是超鏈接
$last = ($page == $totalPage) ? "[ 尾頁 ]" : "<a href='{$url}?page={$totalPage}'>[ 尾 頁 ]</a>";
$prevPage=($page>=1)?$page-1:1;
$nextPage=($page>=$totalPage)?$totalPage:$page+1;
////當前頁為1,上一頁是普通文字,否則是超鏈接
$prev = ($page == 1) ? "[ 上一頁 ]" : "<a href='{$url}?page={$prevPage}'>[ 上一頁 ]</a>";
////當前頁是最后一頁,下一頁是普通文字,否則是超鏈接
$next = ($page == $totalPage) ? "[ 下一頁 ]" : "<a href='{$url}?page={$nextPage}'>[ 下一 頁 ]</a>";
$str = "總共{$totalPage}頁/當前是第{$page}頁";
for($i = 1; $i <= $totalPage; $i ++) {
//當前頁無連接,否則是超鏈接
if ($page == $i) {
$p .= "[{$i}]";
} else {
$p .= "<a href='{$url}?page={$i}'>[{$i}]</a>";
}
}
$pageStr=$str . $index . $prev . $p . $next . $last;
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<title>用戶列表</title>
</head>
<body>
<table width='80%' border='1' bgcolor='#ABCDEF' cellpadding='0' cellspacing='0'>
<tr>
<td>編號</td>
<td>用戶名</td>
<td>郵箱</td>
</tr>
<?php
if(is_array($rows)&&count($rows)>0){
foreach($rows as $user){
?>
<tr>
<td><?php echo $user['id'];?></td>
<td><?php echo $user['username'];?></td>
<td><?php echo $user['email'];?></td>
</tr>
<?php
}
}else{
?>
<tr><td colspan='3'>木有記錄</td></tr>
<?php
}
?>
<tr><td colspan='3'><?php echo $pageStr;?></td></tr>
</table>
</body>
</html>
歡迎參與《PHP中分頁效果的具體實現方案和詳細步驟及源碼》討論,分享您的想法,維易PHP學院為您提供專業教程。