1. 什么是分页技术
分页,是一种将所有数据分段展示给用户的技术.用户每次看到的不是全部数据,
而是其中的一部分,如果在其中没有找到自习自己想要的内容,用户可以通过制定
页码或是翻页的方式转换可见内容,直到找到自己想要的内容为止.其实这和我们
阅读书籍 翻页 很类似 。
2. 分页的意义
分页确实有效,但它一定会加大系统的复杂度,但可否不分页呢?如果数据量少的话当
然可以.但是对于企业信息系统来说数据量不会限制在一个小范围内.如果不顾一切
的Select * from某个表,再将返回的数据一古脑的扔给客户,即使客户能够忍受成千
上万足够让人眼花缭乱的表格式数据,繁忙的网络,紧张的服务器也会提出它们无声的
抗议,甚至有时会以彻底的罢工作为终结 。
3. 如何实现分页
所谓分页显示,也就是讲数据库中的结果集,一段一段显示出来在这里我们就需要用到
Mysql语句中的limit命令
怎么分段,当前在第几段 (每页有几条,当前再第几页)
比如:
前10条记录:select * from table limit 0,10
第11至20条记录:select * from table limit 10,10
第21至30条记录:select * from table limit 20,10
从上面可以看出规律
(当前页数 - 1 )X 每页条数 , 每页条数
Select * from table limit ($Page- 1) * $PageSize, $PageSize
所需的PHP文件
conn.php 连接数据库文件
mupage.php 分页完整文件
3.1开发思路
首先我们来整理下,分页功能的开发思路与流程
( 1 ) 连接数据库
( 2 ) 从数据库传出我们想要的数据
( 3 ) 使用sql语句编写获取分页数据
( 4 ) 把sql语句传入我们的数据库
( 5 ) 处理我们得到的数据在页面上展示出来
( 6 ) 获取数据总数,计算页数和显示的数据以及偏移量。
( 7 ) 将分页数据初始化,对头部和尾部省略处理
( 8 ) 设置分页条样式显示即可
3.2第一步:简单的分页效果
//释放结果
mysql_free_result($result);
//获取数据总数
$to_sql="SELECT COUNT(*)FROM test";
$to_result=mysql_fetch_array(mysql_query($to_sql));
$to=$to_result[0];
//计算页数
$to_pages=ceil($to/$PageSize);
mysql_close($conn);
/** 3.显示数据+分页条 **/
$page_banner="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'>上一页</a>";
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页</a>";
$page_banner.="共{$to_pages}页";
echo $page_banner;
$_SERVER['PHP_SELF'] 的解读
假如命令行的地址是:http://www.baidu.com/index.php
那么:
$_SERVER['HTTP_HOST']=='www.baidu.com'
$_SERVER['PHP_SELF']=='/index.php'
所以 ,一个是主机地址,一个是脚本文件的绝对路径
3.3第二步: 增加首页和尾页
//获取数据总数
$to_sql="SELECT COUNT(*)FROM test";
$to_result=mysqli_fetch_array(mysqli_query($link,$to_sql));
$to=$to_result[0];
//计算页数
$to_pages=ceil($to/$PageSize);
mysql_close($conn);
/** 3.显示数据+分页条 **/
$page_banner="";
//计算偏移量
if($page>1){
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'>上一页</a>";
}
if ($page<$to_pages){
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页</a>";
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($to_pages)."'>尾页</a>";
}
$page_banner.="共{$to_pages}页";
echo $page_banner;
3.4第三步:具体案例, 页码分页
<html>
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html;">
</head>
<body>
<?php
/** 1.传入页面 **/
$page = $_GET['p'];
/** 2.根据页面取出数据:php->mysql i **/
$host = "localhost";
$username = 'root';
$password = ‘’ ;
$db = 'bbs2';
$PageSize=5;//每五条分隔
$ShowPage=3;//我们只显示3个页码
//连接数据库
$conn = mysql i _connect($host, $username, $password , $db);
if(!$conn){
// echo "数据库连接失败";
exit;
}
//设置数据库编码格式
mysql_query('SET NAMES UTF8');
//编写sql获取分页数据:SELECT * FROM 表名 LIMIT 起始位置 , 显示条数
$sql = "SELECT*FROM test LIMIT ".($page-1)*$PageSize .",$PageSize";
if(!$sql){
echo "取出不成功";
};
//把sql语句传送到数据库
$result = mysql_query($sql);
//处理我们的数据
echo "<table border=1 cellspacing=0 width=15% >";
echo "<tr><td>ID</td><td>名字</td><td>性别</td></tr>";
while($row = mysql_fetch_assoc($result)){
echo "<tr>";
echo "<td>{$row['id']}</td>";
echo "<td>{$row['name']}</td>";
echo "<td>{$row['sex']}</td>";
echo "<tr>";
}
echo "</table>";
//释放结果
mysql_free_result($result);
//获取数据总数
$to_sql="SELECT COUNT(*)FROM test";//用来计算数据总数
$to_result=mysql_fetch_array(mysql_query($to_sql));
$to=$to_result[0];//取得总数
//计算页数
$to_pages=ceil($to/$PageSize);//计算页数,ceil向上取整数
mysql_close($conn);
/** 3.显示数据+分页条 **/
$page_banner="";
//计算偏移量
$pageffset=($ShowPage-1)/2;//页面偏移码
if($page>1){
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=1'>首页</a>";
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page-1)."'>上一页</a>";
}
//初始化数据
$start=1;//分页第一个标记
$end=$to_pages;//分页最后一个标记
if ($to_pages>$ShowPage){//如果总页数大于显示页码数目,$to_pages超过4则满足
if($page>$pageffset+1){//如果当前页大于页面偏移码+1的话,则左标显示...
$page_banner.="...";
}
if ($page>$pageffset){//如果页面大于页面偏移码
$start=$page-$pageffset;//分页标记改变,当前页码-偏移码=中间分页码最左边页码
$end=$to_pages>$page+$pageffset?$page+$pageffset:$to_pages;
//判断语句,如果总页数大于当前页数+偏移码,真则$end=页数+偏移码,假则$end=总页数
}else{//如果页面不大于页面偏移码
$start=1;//开始页为首页
$end=$to_pages>$ShowPage?$ShowPage:$to_pages;
}
if ($page+$pageffset>$to_pages){//到了最后几页
$start=$start-($page+$pageffset-$end);//最后几页的第一标记
}
}
for($i=$start;$i<=$end;$i++){
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($i)."'>{$i}</a>";
}
//尾部省略
if ($to_pages>$ShowPage&&$to_pages>$page+$pageffset){
//如果总页数大于显示页码且总页数大于当前页加偏移页
$page_banner.="...";
}
if ($page<$to_pages){
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($page+1)."'>下一页</a>";
$page_banner.="<a href='".$_SERVER['PHP_SELF']."?p=".($to_pages)."'>尾页</a>";
}
$page_banner.="共{$to_pages}页";
$page_banner.="<form action='mupage.php' method='get'>";
$page_banner.="到第<input type='text'size='2'name='p'>页";
$page_banner.="<input type='submit'value='确定'>";
$page_banner.="</form></div>";
echo $page_banner;
?>
</body>
</html>
4. 总结
分页技术并不难理解,主要是对SQL语句limit的应用,在清楚理解分页开发思路后,主要对SQL语句里的 ” ..... limit ” . ($page-1)*$PageSize .",$PageSize" 理解透彻,并对需要获取的数据实现获取,那么分页技术基本上没有什么难点可言。