《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学院为您提供专业教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/6895.html