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
电气控制技术及应用习题库 - 图文11-03
图像处理实验报告10-01
前行广释11-11
第一次包饺子作文550字07-09
最新苏州科技大学13级数电期末试卷B04-13
基于课程标准的教学设计05-30
2012年7月8日省级以下邮政监管考试行测真题 - 图文06-12
无水硫酸钠项目可行性研究报告 - 图文12-17
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 技术
- PHP
- 20MWp光伏项目工程量清单编制说明及清单格式
- “重点基础材料技术提升与产业化”重点专项2016申报指南
- 七年级英语下册连词成句练习
- ☆小学数学小组合作学习有效性课题研究成果汇编
- 未考先知 - 2018年高考地理全国卷信息归集与高考命题预测(含答
- 师德规范自我评价情况(共8篇)
- 危险预知训教育资料
- 动态汛限水位试验细则姚
- 数控加工中心—换刀机械手设计
- 2015年6月广东学业水平考试物理模拟题1
- 涵洞工程毕业论文
- 32米预应力混凝土简支T型梁桥毕业设计
- 人教版三年级上册数学三四单元教案表格可打印详解
- 《JSP程序设计》实验指导书
- 数据库系统查询操作练习题6-子查询、集合查询
- 《建筑机械专业管理实务》习题
- 2017年广播电视编导统考面试真题(1)
- 政治专题讲座论文
- 用友ERP系统“仓库--生产车间”操作手册
- 市政道路电力、照明工程施工方案