写给产品经理及UI的PHP教程丨文章管理系统简易分页

发布时间:2025-08-28 点击:33
首先为了查看分页效果,请先创建好充足的文章。(最起码25个以上)
打开article_list.php页面,把select * from article部分改成如下代码:
运行之后可以看到原来有一堆数据的文章列表就剩了10条最新的数据。
代码中新增的部分是limit 0,10。通过查询mysql获得结果集的时候我们可以通过limit来指定返回的数据起始位置和记录数。
limit在英文中是界限的意思,同样的道理我们通过2个数字给需要返回的数据划了界限。第一个数字代表的是起始位置,第二个数字代表的是需要返回的记录数量。
关于起始位置需要注意,当数值为0的时候才是从第一条数据开始返回,当数值为1的时候从第二条数据开始返回,以此类推,也就是从第 1条数据开始返回。
limit 0,10是的意思就是从第一条数据开始返回一共10条数据。当改成limit 10,10的时候就意味着从第11条数据开始返回一共10条数据,也就是返回第11-20的数据。
那也就是说假设我们每一页要显示10个文章的话,limit 0,10是第一页,limit 10,10就是第二页,limit 20,10就是第三页,以此类推。
那如何计算第x页的起始位置是多少呢?第1页是0,第2页是10,第3页是20。假设我们的第x页的起始位置为y,不难想象 y=(x-1)*10。
这时候我们基本上也就可以联想到,只要我们通过一个参数告诉这个页面x值是多少,就可以通过x计算出y,并且在limit后方带入y的值就可以实现想看第几页就看第几页的效果了。
之前我们有讲到过通过form表单的post方法向服务器提交参数,也可通过get方法向url提交参数,这次我们就用get方法提交一个参数到url告知我们需要查看第几页。
ps:post方法也可以实现,不过某些时候用get方法比较省事(后面会讲到)
打开article_list.php页面,在栏目列表的表格的结束位置/table下方增加如下代码:
代码分析:
我们创建了一个方法为get的表单,并可通过name为page的input文本框像url提交参数page的值,除了post以外我有说过还有get方法直接把参数提交到链接地址url里去。
在article_list.php中把select * from article order by add_time desc limit 0,10部分代码删掉。
打开article.php页面在include(‘article_list.php’);页面上方增加如下代码:
注意:要放在 else{}内。当然不是说放到if语句外面不行,只不过这段代码我们只需要在进入列表页面的时候执行就可以了,所以放到外面无疑是降低执行效率。
代码分析:
第1行、通过if($_get[‘page’])来判断$_get[‘page’]值是否存在。在if条件语句中可以以if(变量)的形式来判断该变量值是否存在,有值意味着条件成立,无值意味着条件不成立。
第2行、当条件成立的时候把$_get[‘page’]的值赋值到变量$page,在这里变量$page就是之前公式中的x,为了方便理解我用了$page来表示当前页面。
第4行、条件不成立是$page的值被赋值为1,也就是$page的默认值是1。
第6行、$snum就是之前的y,通过公式计算出起始位置$snum的数值。这个运算公式跟我们一般的数学公式没有差别,只不过在程序中用“*”来表示乘法符号,因为键盘上没有“×”符号。
第7行、把$snum的值带入到了limit后方。
好了,现在运行列表页面看看我们的成果吧(为了方便查看地址栏的变化请直接在浏览器中打开http://127.0.0.1/cainiao/admin/article.php,不要从框架的左侧栏目里点进去)!在文本框中输入页码点击提交提交按钮就可以翻页查看了有木有!
但是有个问题,假设我们有25个文章,并且每页显示10条的话,那一共就是3页,翻到第4页,第5页都是没有意义的。好歹应该告诉一下用户一共有多少页吧。
下面就来讲解如何计算出总页数。
也不难想象,总页数当然是需要用文章总数和每页显示的文章数量来换算得出。
先看看几个情况。
假设我们每页显示10个文章,文章一共有10条的时候就是1页,20条、30条、40条的时候2页、3页、4页。这个数字很容易得到,只要总数除以每页文章数10就可以得到。
但是当文章有1、2、3…9条的时候是1页,有11、12、13…19条的时候是2页,21、22、23…29的时候3页。
如果总数除以10我们就会得到0.1、0.2、0.3的时候是1页,1.1、1.2、1.3的时候是2页,2.1、2.2、2.3的时候是3页。
其中的规律不难发现页数是我们除以10之后获得的结果数的整数部分 1。
根据以上规律我们可以得出如下结论:
1. 当文章总数除以每页文章数的结果为整数的时候,总页数=文章总数除以每页文章数。
2. 当文章总数除以每页文章数的结果不是整数的时候,总页数=(文章总数除以每页文章数)取整数部分 1
ok,我们现在就可以根据我们得出的结论写出如下代码了,打开article.php在if($_get[‘page’]){上方加入下方代码:
代码分析:
第1行,我们定一个了一个变量$pnum并给其赋值10,作为每页显示的文章数来用。因为10这个数字在下方代码种要多次出现,所以我们定一成一个变量好方便我们随时修改每页显示的数量。
第2行,通过select count(*) from article的mysql指令返回了article表中的记录数,这个很好记,count不就是数数的意思吗?比我们之前的select * from语句就多了一个数数而已。
在这一行获得的结果和select * from方式来获得结果一样,他也只是个结果集而已,只不过该结果里只有一行数据,这一行数据就是记录数(文章总数)
第3行,通过mysql_result()函数返回该结果集中一个字段的值(文章总数)并赋值到了变量$sum。括号中$s是用来指定需要返回的结果集,0是用来指定起始位置,跟limit类似0代表着返回第一行,因为$s中只有一行数据所以如果把0改成1或者其他数字就会出现错误,因为没有第二行或者更多的数据。mysql_result函数的正确写法是mysql_result(结果集,行号,字段名)。其中字段名是可以省略的,如果省略字段的话会显示第一个字段的值。在我们的结果集$s中只有一个字段,该字段名是count(*),所以指定不指定无所谓。如果这里不好理解的话可以利用我们之前的mysql_fetch_array,把$s转换成一个数组并赋值到一个字段里,再用print_r()来打印这个字段看看这个数组是什么结构的,基本上就能理解了。
第4行、不知道大家还记不记得小学数学里学过的“余数”,当3除2的时候余数为1,当7除4的时候余数为3,当8除4的时候余数为0。在php程序中%%u5c31是获得余数的运算符。那$sum%$pnum==0的意思自然就是文章总数除以每页显示的文章数的余数是等于0的时候,也就是说是整数的时候。
第5行、当满足上面的条件的时候,变量$pages(总页数)的值是 $sum/$pnum,其中符号“/”是代表着“除”。
第7行、floor()是一个用于取整数的一个函数,返回一个不大于括号中数字的最大整数。floor(2.1)返回的是2,floor(0.5)返回的是0,floor(-1.5)返回的是-2。floow在英文中是楼层的意思,我们设想一下一只虫子飞在2层和3层之间,它不就在2层吗?飞在地下1层和地下2层之间,它不就在地下2层吗?floor就是返回楼层,就这么记!
好了,所有我们需要的变量都已经得到了,我们来把他输出出来,打开article_list.php在form表单前面加入如下代码:
运行之后就可以把文章数、页数、当前页显示出来了。
这样基本上完全可以满足一个网页的分页需求了。不过用户体验很不好!
接下来我们再来做一个最常见的分页功能之一的上一页、下一页。
上一页、下一页是什么概念?上一页当然就是当前页-1,下一页就是当前页 1。
打开article.php页面在$snum=($page-1)*$pnum;上方插入如下代码:
这就不用我说了吧?继续打开article_list.php页面,在form表单后面插入如下代码:
在这里就体现出来了我们这次为什么用了get方法,没用post方法,在做上一页下一页功能的时候我们可以通过a标签直接把url地址改成带有我们所需要的参数page的url。href的地址也同action中的地址一样当从“?”开始的时候就会在当前页面的地址文件后方里加上href中的部分。
上一页、下一页的功能做好了,不过比较笨,当到最后一页的时候还能继续往下翻,在第一页的时候还能

网站模板问题-其他问题
新浪云服务器怎么暂时关闭网络
挂机云虚拟服务器
云服务器镜像恢复
购买网站空间多少钱
被攻击证明-其他问题
腾讯云服务器怎么关闭内网ip
服务器负载高中午系统访问量很小