《PHP中分頁(yè)效果的具體實(shí)現(xiàn)方案和詳細(xì)步驟及源碼》要點(diǎn):
本文介紹了PHP中分頁(yè)效果的具體實(shí)現(xiàn)方案和詳細(xì)步驟及源碼,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
1 1.分頁(yè)效果的實(shí)現(xiàn)
1.1 問(wèn)題
我們經(jīng)常在瀏覽網(wǎng)站的時(shí)候看到過(guò)分頁(yè)效果,例如你在百度的時(shí)候,查詢出來(lái)的結(jié)果可能成千上萬(wàn)甚至更多,這時(shí)候一頁(yè)顯示不下,就需要使用到分頁(yè)效果,那么我們?nèi)绾螌?shí)現(xiàn)呢?
1.2 方案
分頁(yè)功能的核心是通過(guò)LIMIT語(yǔ)句,LIMIT的第一個(gè)參數(shù)是偏移量,第二個(gè)參數(shù)是每頁(yè)顯示的記錄數(shù).
1.3 步驟
第一步,創(chuàng)建標(biāo)準(zhǔn)的PHP文檔.
第二步,通過(guò)mysql_connect()方法連接數(shù)據(jù)庫(kù),在配合上or die語(yǔ)句,連接失敗的時(shí)候顯示錯(cuò)誤編號(hào)和錯(cuò)誤信息.其代碼如下:
<?php
header('content-type:text/html;charset=utf-8');
//連接數(shù)據(jù)庫(kù)
$link=mysql_connect('localhost','root','root') or die('數(shù)據(jù)庫(kù)連接失敗<br/>Error '.mysql_errno().':'.mysql_error());
第三步,設(shè)置客戶端的編碼方式UTF8,可以通過(guò)兩種方式實(shí)現(xiàn),任選一種即可.其代碼如下:
//設(shè)置客戶端編碼方式
mysql_set_charset('UTF8',$link);
//mysql_query("SET NAMES UTF8",$link);
第四步,打開(kāi)指定的數(shù)據(jù)庫(kù),通過(guò)mysql_select_db()函數(shù)實(shí)現(xiàn).其代碼如下:
//打開(kāi)指定數(shù)據(jù)庫(kù)
mysql_select_db('test',$link) or die('指定數(shù)據(jù)庫(kù)打開(kāi)失敗');
第五步,通過(guò)mysql_query()執(zhí)行SQL查詢,執(zhí)行查詢user表的SQL語(yǔ)句,查詢id字段,執(zhí)行SELECT關(guān)鍵字的查詢,成功返回MySQL Result結(jié)果集,失敗返回false.其代碼如下:
//執(zhí)行SQL查詢
$sql='SELECT id FROM user';
$result=mysql_query($sql,$link);
第六步,通過(guò)is_resource()判斷$result是否是結(jié)果集并且通過(guò)mysql_num_rows($result)判斷結(jié)果集中記錄數(shù)是否大于0,如果有我們通過(guò)mysql_num_rows($result)取出結(jié)果集的總記錄數(shù);否則輸出沒(méi)有記錄并退出.其代碼如下:
if(is_resource($result)&&mysql_num_rows($result)>0){
$totalRows=mysql_num_rows($result);//總記錄數(shù)
//釋放結(jié)果集
mysql_free_result($result);
}else{
exit('沒(méi)有記錄,咋分頁(yè)呀!!!');
}
第七步,設(shè)置每頁(yè)顯示的記錄條數(shù),計(jì)算總頁(yè)碼數(shù);接著接收頁(yè)碼,并且處理頁(yè)碼的特殊形式.其代碼如下:
//設(shè)置每頁(yè)顯示的記錄條數(shù)
$pageSize=5;
//得到總頁(yè)碼數(shù)
$totalPage=ceil($totalRows/$pageSize);
//接收頁(yè)碼
$page=$_REQUEST['page']?(int)$_REQUEST['page']:1;
//處理特殊頁(yè)碼形式
if($page<0)$page=1;
if($page>=$totalPage)$page=$totalPage;
第八步,計(jì)算偏移量,偏移量公式=(當(dāng)前頁(yè)碼-1)*每頁(yè)顯示的記錄數(shù).其代碼如下:
//計(jì)算偏移量
$offset=($page-1)*$pageSize;
第九步,分頁(yè)顯示記錄,執(zhí)行SQL查詢,帶有分頁(yè)的查詢語(yǔ)句.其代碼如下:
//執(zhí)行SQL查詢
$sql="SELECT id,username,email FROM user LIMIT {$offset},{$pageSize}";
$result=mysql_query($sql,$link);
第九步,判斷是否是結(jié)果集,并且結(jié)果集中是否有記錄,如果有記錄得到結(jié)果集中的記錄形成二維的索引+關(guān)聯(lián)的形式;否則輸出沒(méi)有記錄退出.其代碼如下:
if(is_resource($result)&&mysql_num_rows($result)>0){
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
$rows[]=$row;
}
//釋放結(jié)果集
mysql_free_result($result);
//關(guān)閉連接
mysql_close($link);
}else{
exit('木有記錄請(qǐng)?zhí)砑?#39;);
}
第十步,輸出頁(yè)碼,頁(yè)碼形式為首頁(yè) 上一頁(yè) 頁(yè)碼 下一頁(yè) 尾頁(yè) 總共多少頁(yè),首先設(shè)置首頁(yè)、上一頁(yè)、下一頁(yè)、尾頁(yè)和總共多少頁(yè)的形式.如果當(dāng)前為第一頁(yè),則首頁(yè)和上一頁(yè)都是普通文本;如果當(dāng)前頁(yè)是最后一頁(yè),則尾頁(yè)和下一頁(yè)是普通文本;其代碼如下:
//得到當(dāng)前執(zhí)行腳本的文件名
$url = $_SERVER ['PHP_SELF'];
//當(dāng)前頁(yè)為1,首頁(yè)是普通文字,否則是超鏈接
$index = ($page == 1) ? "[ 首頁(yè) ]" : "<a href='{$url}?page=1'>[ 首頁(yè) ]</a>";
//當(dāng)前頁(yè)是最后一頁(yè),尾頁(yè)是普通文字,否則是超鏈接
$last = ($page == $totalPage) ? "[ 尾頁(yè) ]" : "<a href='{$url}?page={$totalPage}'>[ 尾 頁(yè) ]</a>";
$prevPage=($page>=1)?$page-1:1;
$nextPage=($page>=$totalPage)?$totalPage:$page+1;
////當(dāng)前頁(yè)為1,上一頁(yè)是普通文字,否則是超鏈接
$prev = ($page == 1) ? "[ 上一頁(yè) ]" : "<a href='{$url}?page={$prevPage}'>[ 上一頁(yè) ]</a>";
////當(dāng)前頁(yè)是最后一頁(yè),下一頁(yè)是普通文字,否則是超鏈接
$next = ($page == $totalPage) ? "[ 下一頁(yè) ]" : "<a href='{$url}?page={$nextPage}'>[ 下一 頁(yè) ]</a>";
$str = "總共{$totalPage}頁(yè)/當(dāng)前是第{$page}頁(yè)";
第十一步,通過(guò)for循環(huán)循環(huán)輸出頁(yè)碼,設(shè)置當(dāng)前頁(yè)無(wú)鏈接的情況,拼接最終形成的分頁(yè)字符串,其代碼如下:
for($i = 1; $i <= $totalPage; $i ++) {
//當(dāng)前頁(yè)無(wú)連接,否則是超鏈接
if ($page == $i) {
$p .= "[{$i}]";
} else {
$p .= "<a href='{$url}?page={$i}'>[{$i}]</a>";
}
}
$pageStr=$str . $index . $prev . $p . $next . $last;
第十二步,顯示分頁(yè)之后的數(shù)據(jù),通過(guò)表格簡(jiǎn)單布局,如果有數(shù)據(jù)則顯示,否則顯示木有記錄,其代碼如下:
<!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>編號(hào)</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>
啟動(dòng)瀏覽器并且瀏覽該文件,其運(yùn)行效果如圖-1所示.
圖1
1.4 完整代碼
01_page.php具體代碼實(shí)現(xiàn)如下:
<?php
header('content-type:text/html;charset=utf-8');
//連接數(shù)據(jù)庫(kù)
$link=mysql_connect('localhost','root','root') or die('數(shù)據(jù)庫(kù)連接失敗<br/>Error '.mysql_errno().':'.mysql_error());
//設(shè)置客戶端編碼方式
mysql_set_charset('UTF8',$link);
//打開(kāi)指定數(shù)據(jù)庫(kù)
mysql_select_db('test',$link) or die('指定數(shù)據(jù)庫(kù)打開(kāi)失敗');
//執(zhí)行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);//總記錄數(shù)
//釋放結(jié)果集
mysql_free_result($result);
}else{
exit('沒(méi)有記錄,咋分頁(yè)呀!!!');
}
//設(shè)置每頁(yè)顯示的記錄條數(shù)
$pageSize=5;
//得到總頁(yè)碼數(shù)
$totalPage=ceil($totalRows/$pageSize);
//接收頁(yè)碼
$page=$_REQUEST['page']?(int)$_REQUEST['page']:1;
//處理特殊頁(yè)碼形式
if($page<0)$page=1;
if($page>=$totalPage)$page=$totalPage;
//計(jì)算偏移量
$offset=($page-1)*$pageSize;
//執(zhí)行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;
}
//釋放結(jié)果集
mysql_free_result($result);
//關(guān)閉連接
mysql_close($link);
}else{
exit('木有記錄請(qǐng)?zhí)砑?#39;);
}
//得到當(dāng)前執(zhí)行腳本的文件名
$url = $_SERVER ['PHP_SELF'];
//當(dāng)前頁(yè)為1,首頁(yè)是普通文字,否則是超鏈接
$index = ($page == 1) ? "[ 首頁(yè) ]" : "<a href='{$url}?page=1'>[ 首頁(yè) ]</a>";
//當(dāng)前頁(yè)是最后一頁(yè),尾頁(yè)是普通文字,否則是超鏈接
$last = ($page == $totalPage) ? "[ 尾頁(yè) ]" : "<a href='{$url}?page={$totalPage}'>[ 尾 頁(yè) ]</a>";
$prevPage=($page>=1)?$page-1:1;
$nextPage=($page>=$totalPage)?$totalPage:$page+1;
////當(dāng)前頁(yè)為1,上一頁(yè)是普通文字,否則是超鏈接
$prev = ($page == 1) ? "[ 上一頁(yè) ]" : "<a href='{$url}?page={$prevPage}'>[ 上一頁(yè) ]</a>";
////當(dāng)前頁(yè)是最后一頁(yè),下一頁(yè)是普通文字,否則是超鏈接
$next = ($page == $totalPage) ? "[ 下一頁(yè) ]" : "<a href='{$url}?page={$nextPage}'>[ 下一 頁(yè) ]</a>";
$str = "總共{$totalPage}頁(yè)/當(dāng)前是第{$page}頁(yè)";
for($i = 1; $i <= $totalPage; $i ++) {
//當(dāng)前頁(yè)無(wú)連接,否則是超鏈接
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>編號(hào)</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中分頁(yè)效果的具體實(shí)現(xiàn)方案和詳細(xì)步驟及源碼》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/6895.html