php分页可利用表格来分页类
代码如下 | 复制代码 |
<?php class PageList{ /* /* if($this->prevpage==0){ /* /* |
可以看出print_r跟var_export都是可以作为返回值的,只需要把第二个参数设置为true即可
print_r
(PHP 4 , PHP 5)print_r – 打印关于变量的易于理解的信息。
描述
bool print_r ( mixed expression [, bool return])
注: 参数 return 是在 PHP 4.3.0 的时候加上的
print_r() 显示关于一个变量的易于理解的信息。如果给出的是 string、integer 或 float,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。
记住,print_r() 将把数组的指针移到最后边。使用 reset() 可让指针回到开始处。
代码如下 | 复制代码 |
<pre> |
上边的代码将输出:
代码如下 | 复制代码 |
<pre> |
如果想捕捉 print_r() 的输出,可使用 return 参数。若此参数设为 TRUE,print_r() 将不打印结果(此为默认动作),而是返回其输出。
例子 1. return 参数示例
代码如下 | 复制代码 |
<?php |
注: 如果想在 PHP 4.3.0 之前的版本中捕捉 print_r() 的输出,可使用输出控制函数。
注: 在 PHP 4.0.4 之前的版本中,如果给出的 array 或 object 包含了直接或间接指向自身的引用,print_r() 将永远继续下去。print_r($GLOBALS) 就是一个例子,因为 $GLOBALS 自身即是全局变量,其包含了指向自身的引用。
var_export
(PHP 4 >= 4.2.0, PHP 5)var_export – 输出或返回一个变量的字符串表示
描述
mixed var_export ( mixed expression [, bool return])
此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。
您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。
比较 var_export() 和 var_dump().
代码如下 | 复制代码 |
<pre> $b = 3.1; /* 输出: |
var_dump
(PHP 3>= 3.0.5, PHP 4 , PHP 5)var_dump – 打印变量的相关信息
描述
void var_dump ( mixed expression [, mixed expression [, ...]])
此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
提示: 为了防止程序直接将结果输出到浏览器,您可以使用输出控制函数(output-control functions)来捕获函数的输出,并把它们保存到一个 string 型的变量中。
可以比较一下 var_dump() 与 print_r()。
例子 1. var_dump() 示例
代码如下 | 复制代码 |
<pre>
$b = 3.1; /* 输出: ?> |
代码如下 | 复制代码 |
<?php //下面的语句设置此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。 header("Expires: Mon, 26 Jul 1970 05:00:00 GMT"); //下面的语句设置此页面的最后更新日期(用格林威治时间表示)为当天,可以强迫浏览器获取最新资料 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); //告诉客户端浏览器不使用缓存,HTTP 1.1 协议 header("Cache-Control: no-cache, must-revalidate"); //告诉客户端浏览器不使用缓存,兼容HTTP 1.0 协议 header("Pragma: no-cache"); ?> |
先看段代码
代码如下 | 复制代码 |
<?php $pagesize = 10;//每一页显示多少留言记录 $sql = "SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert $recordSql = $sql. " LIMIT ".$page*$pagesize.",".$pagesize; |
下面来看看
第一行:我们暂时先不说,留到以后再说,暂时还用不到;
第二行——第五行:大家一定很眼熟吧,是的这里和post.php插入留言信息的时候的过程是一样的,也就不多说了。
7、8、9和19行我们暂时不说,这里是涉及到分页的,我们将会留到下一章详细的说明这个问题,因为分页的过程在web编程过程中几乎是一个必须要使用的功能。
在11-15行我们定义了一个数据库查询语句,在这条语句中我们用了left join …on..语句,关于这个语句的详细用法请参看Mysql手册联合查询部分。。
看第16行,
代码如下 | 复制代码 |
$numRecord = mysql_num_rows(mysql_query($sql)); |
这个语句中我们用mysql_query($sql)把我们定义的sql语句发给数据库来执行,这个语句执行以后会返回一个记录资源号,我们用外层的mysql_num_rows来取得有多少个匹配的记录——也就是返回的记录总数。
第17行我们用到了ceil函数,这个函数的功能是,进一法取整,也就是说两个数进行除法操作之后只要余数大于零整数部分就加一然后舍去小数部分,所以ceil(1/2)的结果是1,而不是我们通常所见到的0.5。这个对于我们来说很有用——也留到下一章分页的时候再说吧。
第19行,涉及到分页部分。但是这一行值得说的是,在PHP中字符串的相加,也就是字符串的连接。两个字符串相加的操作符是点,看例子:
代码如下 | 复制代码 |
$strFirst=”中国”; $strSum = $strFirst.$strTwo; |
输出的结果正如我们所料到的一样:中国伟大的国度。
第20行:我们发送一个带分页功能的sql语句到数据库执行,并把执行结果赋值给$result;
接着我们看,本页函数的第:128-154行,这个程序的片段功能是循环输出在数据库中查询到的记录。这是我们本章的重点:
看PHP的内置函数mysql_fetch_object()从结果集中取得一行作为对象,关于PHP的对象我们在高级编程栏目中将会详细的说明,我们这里只需要知道这种循环查询记录的方式,需要用 $对象->字段名 来访问就行了,执行起来的时候就是每一次指针下移一次,当遇到没有更多的记录的时候就返回一个false所以我们可以用while循环来读取$result的这个记录集。最终形成了while($rs=mysql_fetch_object($result))这个语句,循环调用mysql_fetch_object函数并且把每次返回的对象赋值给$rs变量,现在哦我们看这个循环的内部,我们可以用$rs->name来取得留言人姓名,用$rs->post_time来访问留言时间。
在显示post_time的时候我们做了一些处理,使用到了date()函数,记得我们存储留言的时候用到了time()函数,这个函数返回的是一个时间戳,就是从1970年的第一秒起到现在已经经过的秒数(格林尼治时间)。而date函数就是把这个秒数翻译为我们所需要的时间格式,返回怎样的字符串需要们在date()函数的第一个参数中制定,该函数的第二个参数如果没有给出,也就是需要翻译成时间格式的秒数没有给出的话,他就会以当前时间来翻译。
Date(“Y年m月d日 H:i:s”),输出结果就是2009年4月26日 11:16:20。
我们在index.php的132行有这样的写法:
代码如下 | 复制代码 |
<?php echo date(”Y-m-d H:i:s”,$rs->post_time+8*3600)?> |
我们具体说说这个,我想大家一定会对8*3600这个地方感到奇怪,其实原因很简单。咱们用time()函数存储时间的时候用的是格林尼治时间,这个时间和我们的时间相差刚好八个小时,每个小时3600秒,我们处在东方比西方的时间快所以要加上的。记住我们用的是北京时间——处在东八时区哦,这个是常识!关于这一点还有一个做法,这将会在专门阐述PHP的日期函数的文章里详细说明。
144和146行都用了两个函数htmlspcialchars和nl2br,其中htmlspcialchars这个函数是为了避免用户输入的脚本代码(html和javascript)被执行而必须的,这个函数很重要。如果没有这个函数用户输入的js代码和html代码都会被作为页面程序的一部分被执行,这一点我们在《关于PHP代码安全性建议》一文中已经说过,不在赘述。
nl2br这个函数的作用是讲数据中的n换行转换成html的换行<br/>以便于页面表现。在我们输入留言信息的时候,用的<textarea></textarea>这个表单,保存信息的时候,换行使用n来表示的所以我们这里需要转换,以保留用户输入信息在显示的时候我输入时段落一致。
分页的关键问题其实在于Mysql的一个关键字limite这个关键字后边跟的两个数字,第一个是需要记录的开始行数,第二个数字是从这个开始行数后取得几行记录——这一点大家不要误以为是从第几行开始到第几行结束,相差很远的。
看看我们index.php的第19行:
代码如下 | 复制代码 |
$recordSql = $sql. ” LIMIT “.$page*$pagesize.”,”.$pagesize; |
其中变量$page的判断在程序的第8行和第9行得到的:
代码如下 | 复制代码 |
if(isset($_GET['page'])&&$_GET['page']!=”) $page=$_GET['page']; |
当然大家也看到了$_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 "<a href=index.php?page=".($page-1).">上一页|</a>" ; |
如果变量$page>0的话,也就是当前的页码大于0说明有上一页,那么就显示“上一页”的链接,这个链接里面的$page需要减一,例如当前页是2,那么上一页当然是1了是不是,当我们点击上一页的时候,随着这个链接将会把page=1传递过去,这种依靠链接传递变量的方式就是get方法。 这就回到了程序8行9行进行处理了。
在161行,我们做的判断是,如果当前页数小于总记录数-1——因为我们的页码是从0开始的,所以总记录数要减一进行判断才符合实际。如果这个判断成立,说明还有下一页,下一页的时候$page当然要加一了。
好了整个分页就是这样了,只要记住,如何取得总记录数,如何为sql语句加上limit关键字,如何判断显示上下页,一切都ok了
完整的代码
代码如下 | 复制代码 |
$pagesize = 10;//每一页显示多少留言记录 $sql = "SELECT a . * , b.name, b.email, b.qq, c.revert_time, c.revert $recordSql = $sql. " LIMIT ".$page*$pagesize.",".$pagesize; <table width="800" border="0" align="center" bgcolor="#fefefe"> |
相关文章
- 我们这里介绍php与KindEditor编辑器使用时如何利用KindEditor编辑器的分页功能实现文章内容分页,KindEditor编辑器在我们点击分页时会插入代码,我们只要以它为分切符,就...2016-11-25
- 最近接了一个项目,其中有需求要用到jquery分页控件,上网也找到了需要分页控件,各种写法各种用法,都是很复杂,最终决定自己动手写一个jquery分页控件,全当是练练手了。写的不好,还请见谅,本分页控件在chrome测试过,其他的兼容性...2015-10-30
- 本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
- 这篇文章主要介绍了C#实现动态生成表格的方法,是C#程序设计中非常实用的技巧,需要的朋友可以参考下...2020-06-25
Springboot如何使用mybatis实现拦截SQL分页
这篇文章主要介绍了Springboot使用mybatis实现拦截SQL分页,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-19- 在php中要实现分页比起asp中要简单很多了,我们核心就是直接获取当前页面然后判断每页多少再到数据库中利用limit就可以实现分页查询了,下面我来详细介绍分页类实现程序...2016-11-25
- 本文主要介绍了element表格行列拖拽的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-02
- 本文实例讲述了jquery实现的伪分页效果代码。分享给大家供大家参考,具体如下:这里介绍的jquery伪分页效果,在火狐下表现完美,IE全系列下有些问题,引入了jQuery1.7.2插件,代码里有丰富的注释,相信对学习jQuery有不小的帮助,期...2015-10-30
- 这篇文章主要为大家详细介绍了AngularJS实现分页显示数据库信息效果的相关资料,感兴趣的小伙伴们可以参考一下...2016-07-06
- 这篇文章主要介绍了基于jquery实现表格无刷新分页,功能实现了前端排序功能,增加了前端搜索功能,感兴趣的小伙伴们可以参考一下...2016-01-08
- 这篇文章主要介绍了Vue 自适应高度表格的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-14
- 这篇文章主要为大家详细介绍了vue实现页面打印自动分页的两种方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-29
- 这篇文章主要为大家详细介绍了JavaScript实现动态生成表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-02
vue 中使用 vxe-table 制作可编辑表格的使用过程
这篇文章主要介绍了vue 中使用 vxe-table 制作可编辑表格的使用过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-08-13- 这篇文章主要介绍了BootStrap和jQuery相结合实现可编辑表格的相关资料,需要的朋友可以参考下...2016-04-23
- 这篇文章主要为大家详细介绍了vue.js表格分页示例,ajax异步加载数据...2016-10-20
- 这篇文章主要介绍了基于elementUI竖向表格、和并列的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-26
- 本篇文章是对使用c#在word文档中创建表格的方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25