PHP分页技术
更新时间:2024-06-08 10:00:01 阅读量: 综合文库 文档下载
分页技术
1、前言
分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。
2、原理
所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:
每页多少条记录($PageSize)? 当前是第几页($CurrentPageID)?
现在只要再给我一个结果集,我就可以显示某段特定的结果出来。 至于其他的参数,比如:上一页($PReviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。
以MySQL数据库为例,如果要从表内截取某段内容,sql语句可以用:select * from table limit offset, rows。看看下面一组sql语句,尝试一下发现其中的规率。
前10条记录:select * from table limit 0,10 第11至20条记录:select * from table limit 10,10 第21至30条记录:select * from table limit 20,10 ……
这一组sql语句其实就是当$PageSize=10的时候取表内每一页数据的sql语句,我们可以总结出这样一个模板:
select * from table limit ($CurrentPageID - 1) * $PageSize, $PageSize
拿这个模板代入对应的值和上边那一组sql语句对照一下看看是不是那么回事。搞定了最重要的如何获取数据的问题以后,剩下的就仅仅是传递参数,构造合适的sql语句然后使用php从数据库内获取数据并显示了。以下我将用具体代码加以说明。
3、简单代码 3.1面向过程:
// 建立数据库连接
$link = mysql_connect(\, \, \) or die(\. mysql_error());
mysql_query (\); //设置utf8字符集,以正确显示中文信息 mysql_select_db(\,$link)
or die ( \不能选择指定的MySQL数据库:\. mysql_error());
// 获取当前页数
if( isset($_GET['page']) ){
$page = intval( $_GET['page'] ); } else{
$page = 1; }
// 每页数量
$page_size = 1;
// 获取总数据量
$sql = \; $result = mysql_query($sql); $row = mysql_fetch_row($result); //var_dump($row); $amount = $row[0]; // 记算总共有多少页 if( $amount ){
if( $amount < $page_size ){ $page_count = 1; } //如果总数据量小于$PageSize,那么只有一页
if( $amount % $page_size ){ //取总数据量除以每页数的余数
$page_count = (int)($amount / $page_size) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一 }else{
$page_count = $amount / $page_size; //如果没有余数,则页数等于总数据量除以每页数的结果 } } else{
$page_count = 0; }
// 翻页链接
$page_string = ''; if( $page == 1 ){
$page_string .= '第一页|上一页|'; } else{
$page_string .= '第一页|上一页|'; }
if( ($page == $page_count) || ($page_count == 0) ){ $page_string .= '下一页|尾页'; } else{
$page_string .= '下一页|尾页'; }
// 获取数据,以二维数组格式返回结果 if( $amount ){
$sql = \. ($page-1)*$page_size .\$page_size\; $result = mysql_query($sql);
while ( $row = mysql_fetch_row($result) ){ $rowset[] = $row; } }else{
$rowset = array(); }
//显示数据
foreach ($rowset as $row) {
?>
总共 页
mysql_free_result($result); //释放与结果集相关联的资源
mysql_close($link); //关闭数据库连接 ?>
3.2引入ajax技术:
tempt.php:
temp2.php:
header(\);
$link = mysql_connect (\,\,\) //建立数据库连接 or die ( \不能连接MySQL服务器:\. mysql_error()); mysql_query (\); //设置utf8字符集,以正确显示中文信息 mysql_select_db(\,$link) //选择MySQL服务器下的userlogin数据库 or die ( \不能选择指定的MySQL数据库:\. mysql_error()); $pageSize = 1;//设置每页显示的记录数
$sql = \;// SQL 查询语句 $result = mysql_query($sql,$link); // 进行查询,获取数据库总的记录数 $allPage = mysql_fetch_row($result); $numPage = $allPage[0]; //总的数据记录数
$pages = intval($numPage/$pageSize); // 计算页数 if (isset($_POST['page']))// 获取客户端传递页码数 {
$page=intval($_POST['page']); } else
{
$page=1; //设置为第一页 }
mysql_free_result($result); $first = 1;
$prev = $page-1; //上一页 $next = $page+1; // 下一页 $last = $pages; //尾页
$offset = $pageSize*($page - 1); //计算记录偏移量
$sql = \$offset,$pageSize\;// SQL 查询语句
$result = mysql_query($sql,$link); //读取指定记录数
$row = mysql_fetch_row ($result ); // 从记录集中获取一行记录 do {
for ($i =0; $i < 5; $i++) printf (\, $row[$i]);
}while ($row = mysql_fetch_row($result)); mysql_free_result($result); //释放资源 echo \页次:\.$page.\.$pages; echo \共\.$pages.\页 \;
if ($page>1) echo \onclick=\\\.$first.\href='#'>首页 \;
if ($page>1) echo \onclick=\\\.$prev.\href='#'>上页 \;
if ($page<$pages) echo \.$next.\下页 \;
if ($page<$pages) echo \.$last.\尾页\;
echo \转到第 页 \; ?>
{
$page=1; //设置为第一页 }
mysql_free_result($result); $first = 1;
$prev = $page-1; //上一页 $next = $page+1; // 下一页 $last = $pages; //尾页
$offset = $pageSize*($page - 1); //计算记录偏移量
$sql = \$offset,$pageSize\;// SQL 查询语句
$result = mysql_query($sql,$link); //读取指定记录数
$row = mysql_fetch_row ($result ); // 从记录集中获取一行记录 do {
for ($i =0; $i < 5; $i++) printf (\, $row[$i]);
}while ($row = mysql_fetch_row($result)); mysql_free_result($result); //释放资源 echo \页次:\.$page.\.$pages; echo \共\.$pages.\页 \;
if ($page>1) echo \onclick=\\\.$first.\href='#'>首页 \;
if ($page>1) echo \onclick=\\\.$prev.\href='#'>上页 \;
if ($page<$pages) echo \.$next.\下页 \;
if ($page<$pages) echo \.$last.\尾页\;
echo \转到第 页 \; ?>
正在阅读:
PHP分页技术06-08
《应用密码学》学习笔记03-16
营业线知识竞赛试题12-18
配送中心不同拣货策略的仿真建模研究05-27
市政府给排水设计计算书06-02
计算机信息检索作业 - 图文11-14
振动加速度信号处理探讨11-15
《中国青年》精彩语段摘抄05-22
- 人教新课标必修4 Unit2 Working the land名师导航
- 毕业生“校漂族”大行其道 - 0
- 江苏各市中考作文题出炉 - 0
- 暑期精品班 - 三角形 - 图文
- 情人节送什么礼物好??超强礼物已抵达
- 工程项目管理制度1
- 第四次业务学习 2016
- 会计要素与会计科目
- 欠发达地区小企业会计准则运用问题研究
- 一级锅炉水G4题库
- BBD双进双出筒式磨煤机安装使用说明书 SM-1
- 初一数学有理数教案
- 渝北区房地产评估市场调研报告
- iWebMall 数据字典
- 2018年小学入学教育工作计划
- 计量专业实务与案例分析 - 模拟题三 - 2013年版
- 启示录讲义
- 路基灰土改良(方案)
- 人行反洗钱岗位准入培训测试题集
- 2015电大《学前儿童发展心理学》期末试题及答案
- 技术
- PHP
- 20MWp光伏项目工程量清单编制说明及清单格式
- “重点基础材料技术提升与产业化”重点专项2016申报指南
- 七年级英语下册连词成句练习
- ☆小学数学小组合作学习有效性课题研究成果汇编
- 未考先知 - 2018年高考地理全国卷信息归集与高考命题预测(含答
- 师德规范自我评价情况(共8篇)
- 危险预知训教育资料
- 动态汛限水位试验细则姚
- 数控加工中心—换刀机械手设计
- 2015年6月广东学业水平考试物理模拟题1
- 涵洞工程毕业论文
- 32米预应力混凝土简支T型梁桥毕业设计
- 人教版三年级上册数学三四单元教案表格可打印详解
- 《JSP程序设计》实验指导书
- 数据库系统查询操作练习题6-子查询、集合查询
- 《建筑机械专业管理实务》习题
- 2017年广播电视编导统考面试真题(1)
- 政治专题讲座论文
- 用友ERP系统“仓库--生产车间”操作手册
- 市政道路电力、照明工程施工方案