php写带分页的留言板,php中分页程序之基于留言板详解_PHP教程
文章是重点是讲php中的分页原理,同时我们是利用一个实现来讲解如何在php中实现分页,这个就是基于自己写的留方板程序了,有需要的朋友可以参考一下,很适合于初学者哦。
分页的关键问题其实在于Mysql的一个关键字limite这个关键字后边跟的两个数字,第一个是需要记录的开始行数,第二个数字是从这个开始行数后取得几行记录——这一点大家不要误以为是从第几行开始到第几行结束,相差很远的。
看看我们index.php的第19行:
代码如下
复制代码
$recordSql = $sql. ” LIMIT “.$page*$pagesize.”,”.$pagesize;
其中变量$page的判断在程序的第8行和第9行得到的:
代码如下
复制代码
if(isset($_GET[‘page’])&&$_GET[‘page’]!=”) $page=$_GET[‘page’];
else $page=0;
当然大家也看到了$_GET[‘page’]变量这个下文会说到。
变量$pagesize我们在第7行自己定义的,也就是每页显示多少条记录,我们定义的是10条。当变量$page=0的时候我们语句最终会是这样的:
代码如下
复制代码
$recordSql = “SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert
FROM post a
LEFT JOIN revert c ON ( a.id = c.post_id ) , guest b
WHERE a.guest_id = b.id
ORDER BY a.id DESC
” LIMIT 0,10″;
就是从0条记录开始取得10个记录结果——这个是包括第0条记录的;
当$page=1的时候呢?可想而知了——这个时候$page*$pagesize=10,当然是从……不说了,再说就罗嗦了。
还有需要说的是,为什么我们要在取得总行数之后才加上这个limit呢,很简单嘛,如果我们在取得结果记录数的时候就加上这个limit,我们总行数永远不会大于10,因为加上之后他最多返回的记录数就是10啊兄弟。——这个显然不符合实际情况。所以我们在执行了:
代码如下
复制代码
mysql_num_rows(mysql_query($sql));
取得总记录数,之后才加上limit关键字的。
好了我们已经取得了总记录数,设置了每页显示的记录数10,现在我们需要的就只有总页数了,这个小学的问题我就不说了吧?当然是总记录数除以每页显示的数就是总页数了——当然也有除不尽的时候,例如总记录数11每页显示10个,我们需要分几页呢?当然是两页呢,怎么才能让11/10=2呢?——显然是错误的,但是实际生活就这样并不是完美的数学。使用ceil函数啊,这个上一章也说过了,不说了。
看看我们现在有什么了啊:
代码如下
复制代码
总记录数,$numRecord = mysql_num_rows(mysql_query($sql));
总页数,$totalpage = ceil($numRecord/$pagesize);
我们什么都不缺了,就差如何显示“上一页下一页”了,很简单,两个判断就搞定了,看index.php的159-163行:
第160行:
代码如下
复制代码
if($page>0) echo “上一页|” ;
如果变量$page>0的话,也就是当前的页码大于0说明有上一页,那么就显示“上一页”的链接,这个链接里面的$page需要减一,例如当前页是2,那么上一页当然是1了是不是,当我们点击上一页的时候,随着这个链接将会把page=1传递过去,这种依靠链接传递变量的方式就是get方法。 这就回到了程序8行9行进行处理了。
在161行,我们做的判断是,如果当前页数小于总记录数-1——因为我们的页码是从0开始的,所以总记录数要减一进行判断才符合实际。如果这个判断成立,说明还有下一页,下一页的时候$page当然要加一了。
好了整个分页就是这样了,只要记住,如何取得总记录数,如何为sql语句加上limit关键字,如何判断显示上下页,一切都ok了
完整的代码
代码如下
复制代码
$pagesize = 10;//每一页显示多少留言记录
if(isset($_GET[‘page’])&&$_GET[‘page’]!=”) $page=$_GET[‘page’];
else $page=0;
$sql = “SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert
FROM post a
LEFT JOIN revert c ON ( a.id = c.post_id ) , guest b
WHERE a.guest_id = b.id
ORDER BY a.id DESC”;
$numRecord = mysql_num_rows(mysql_query($sql));
$totalpage = ceil($numRecord/$pagesize);
$recordSql = $sql. ” LIMIT “.$page*$pagesize.”,”.$pagesize;
$result = mysql_query($recordSql);
while($rs=mysql_fetch_object($result)){
?>
留言人:name?> |Email:email?>|QQ:qq?>|留言时间:post_time+8*3600)?>
if(isset($_SESSION[‘login’])&&$_SESSION[‘login’]){
?>
” >删除
}
?>
留言内容:post))?>
回复内容:revert))?>[revert_time!=””) echo date(“Y-m-d H:i:s”,$rs->revert_time+8*3600)?> ]
}
?>
if($page>0) echo “上一页|” ;
if($page
?>
www.bkjia.comtrueTechArticle文章是重点是讲php中的分页原理,同时我们是利用一个实现来讲解如何在php中实现分页,这个就是基于自己写的留方板程序了,有需要的朋…
php写带分页的留言板,php中分页程序之基于留言板详解_PHP教程相关推荐
- 黑猫带你学eMMC协议第7篇:eMMC各种寄存器详解(register)
1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 文章所在专栏:<黑猫带你学:eMMC协议详解&g ...
- 黑猫带你学eMMC协议第8篇:eMMC供电情况详解(power)
1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言. 文章为个人辛苦整理,付费内容,禁止私自转载. 文章所在专栏:<黑猫带你学:eMMC协议详解&g ...
- Rocksdb 写流程,读流程,WAL文件,MANIFEST文件,ColumnFamily,Memtable,SST文件原理详解
文章目录 前言 Rocksdb写流程图 WAL 原理分析 概述 文件格式 查看WAL的工具 创建WAL 清理WAL MANIFEST原理分析 概述 查看MANIFEST的工具 创建 及 清除 MANI ...
- java定时开始和关闭_springboot自带定时器实现定时任务的开启关闭以及定时时间可以配置详解...
一.序言: 最近项目需要用到定时任务,需要完成一个定时功能.经过了解,项目中目前实现定时任务,一般有三种选择,一是用Java自带的timer类.稍微看了一下,可以实现大部分的指定频率的任务的调度(ti ...
- android 单选框 icon,Android中的普通对话框、单选对话框、多选对话框、带Icon的对话框、以及自定义Adapter和自定义View对话框详解...
标签: 对话框就是一个AlertDialog,但是一个简单的AlertDialog,我们却可以将它玩出许多花样来,下面我们就来一起总结一下AlertDialog的用法.看看各位童鞋在平时的工作中否都用 ...
- php写文件 效率,php中读写文件与读写数据库的效率_PHP教程
本文章来给大家介绍一个关于php中读写文件与读写数据库的效率对比,有需要了解的朋友可参考. 测试程序如下: //说明1:由于读数据库语句调用简单的封包函数两次,所以把读文件也改成连续调用两次,数据库记 ...
- delphi接口带上请求头是什么意思_Python接口自动化之Token详解及应用
------·今天距2021年258天·------ 这是ITester软件测试小栈第113次推文 在上一篇Python接口自动化测试系列文章:Python接口自动化之cookie.session应用 ...
- Appium+python自动化(三十二)- 代码写死一时爽,框架重构火葬场 - PageObject+unittest(超详解)...
简介 江湖有言:"代码写死一时爽,框架重构火葬场",更有人戏言:"代码动态一时爽,一直动态一直爽?",虽然听起来有点耸人听闻,但也没有想象中的那么严重,我们在开 ...
- STM32F103C8T6以寄存器方式借助面包板搭建电路点亮LED流水灯详解
文章目录 一.寄存器原理 1.什么是寄存器 2.如何访问寄存器 二.GPIO端口的初始化设置 1.时钟配置 (1)找到时钟使能寄存器映射基地址 (2)找到端口偏移地址以及对应端口所在位置 (3)使能对 ...
最新文章
- HashTable, HashMap, LinkedHashMap, ConcurrentHashMap
- 【温故知新】HTML学习笔记(下)
- 均方根误差有没有单位_Python误差评判:MAE、MSE、RSquare、MAPE和RMSE
- 使用.Net访问Office编程接口
- Razor传值到js
- 第五章:系统困境之 你的努力忽略了关键限制因素
- POJ 2389	Bull Math(水~Java -大数相乘)
- LeetCode之Ransom Note
- junit4 集成测试_使用JUnit规则进行干净的集成测试
- Python---爬虫案例
- 前端学习(2048)vue之电商管理系统电商系统之实现首页内容自定制
- 计算机如何退出1.1.2模式,华为fastboot模式怎么进入和退出?
- ie6识别important问题
- 蓝桥杯 基础练习 特殊回文数
- 天池大数据竞赛平台-东电网智慧现场作业挑战赛:识别高空作业及安全带佩戴Baseline(非官方)
- 安卓Web Service实现天气预报功能
- 阿里大数据产品Dataphin上线公共云,将助力更多企业构建数据中台
- 图解网络TCP/IP
- 小红书品牌投放监测之竞品对比
- Nothing is impossible
热门文章
- Office 365开发者的前端必备课程
- Web API 速率限制(一)
- Docker最全教程——数据库容器化之持久保存数据(十二)
- asp.net core webApi 参数保护
- .NET Core 从 Github到 Nuget 持续集成、部署
- 微软宣布12月15日关闭开源软件托管平台CodePlex
- ArcGIS实验教程——实验二十七:时态数据可视化----以飓风路径为例
- linux shell之得到当前路径下的目录
- C和指针之memmove函数 memcpy函数 strcspn函数 strspn函数 strrstr函数实现
- Effective C++学习笔记之copy构造函数和default函数和copy赋值函数(operator=)