php实现分页功能的详细实例方法

分页效果在网页中是常见的,可是怎样才能实现分页呢,今天做了两种方法来实现一下分页的效果。

首先,我们需要准备在数据库里面准备一个表,并且插入数据,这些都是必需的前提工作了,不多说,如图所示(库名为jereh,表名为n_content):

步骤分析:

我们需要分页的话,需要用到 "select * from tableName limit num1,num2”;这是一个限定查询的语句,后面跟两个参数,num1为从第几个开始查找,num2为查找的信息的个数,如我想查找2,3,4这三条数据,如下图所示:

好了,我们开始说步骤:

1、建立一个函数,用来实现限制查询的功能

首先我们来想一下,实现这个功能我们首先要知道当前的页数和要限制的一个页面显示几条信息,这个可以用形参传过来。那么,我们设置pageNum为页数,pageSize为一个页面显示几条数据,在 "select * from tableName limit num1,num2”这个查询语句中,

num1就是(pageNum-1)*pageSize,num2就是pageSize,明白了这个关系之后,那么就好办了,代码在下面:

  1. //分页的函数
  2. function news($pageNum = 1, $pageSize = 3)
  3. {
  4. $array = array();
  5. $coon = mysqli_connect("localhost", "root");
  6. mysqli_select_db($coon, "jereh");
  7. mysqli_set_charset($coon, "utf8");
  8. // limit为约束显示多少条信息,后面有两个参数,第一个为从第几个开始,第二个为长度
  9. $rs = "select * from n_content limit " . (($pageNum - 1) * $pageSize) . "," . $pageSize;
  10. $r = mysqli_query($coon, $rs);
  11. while ($obj = mysqli_fetch_object($r)) {
  12. $array[] = $obj;
  13. }
  14. mysqli_close($coon,"jereh");
  15. return $array;
  16. }

上面的代码中,值得注意的是,limit后面一定要加一个空格,不然会出错误。

2、建立第二个函数,用来显示总页数的函数

这个没什么新的知识点,都是以前写过的知识点了,直接看代码吧。

  1. //显示总页数的函数
  2. function allNews()
  3. {
  4. $coon = mysqli_connect("localhost", "root");
  5. mysqli_select_db($coon, "jereh");
  6. mysqli_set_charset($coon, "utf8");
  7. $rs = "select count(*) num from n_content"; //可以显示出总页数
  8. $r = mysqli_query($coon, $rs);
  9. $obj = mysqli_fetch_object($r);
  10. mysqli_close($coon,"jereh");
  11. return $obj->num;
  12. }

3、调用这两个函数,进行初步的处理

我们想做下一页、下一页的结果,需要用到get方法在本页面传数据,那么我们在刷新页面的时候,肯定get是得不到数据的,所以需要用三目运算了。

  1. <?php
  2. @$allNum = allNews();
  3. @$pageSize = 3; //约定每页显示的信息条数
  4. @$pageNum = emptyempty($_GET["pageNum"])?1:$_GET["pageNum"];
  5. @$endPage = ceil($allNum/$pageSize); //总页数
  6. @$array = news($pageNum,$pageSize);
  7. ?>

4、在页面进行显示

在页面显示的话,需要用到了foreach循环了,代码简单,看下面:

  1. <table cellpadding="0">
  2. <tr>
  3. <td>编号</td>
  4. <td>新闻标题</td>
  5. <td>来源</td>
  6. <td>点击率</td>
  7. <td>发布日期</td>
  8. </tr>
  9. <?php
  10. foreach($array as $key=>$values){
  11. echo "<tr>";
  12. echo "<td>{$values->id}</td>";
  13. echo "<td>{$values->title}</td>";
  14. echo "<td>{$values->src}</td>";
  15. echo "<td>{$values->indexs}</td>";
  16. echo "<td>{$values->times}</td>";
  17. echo "</tr>";
  18. }
  19. ?>
  20. </table>

5、实现上一页,下一页的效果

要实现页面跳转的效果,我们需要用到了a标签的href属性,地址写“?pageNum = ...”这个pageNum是我们自己定义的,由于是get来传递的,在上一步里面我们已经用$_GET接受了参数,所以我们只需要进行get的参数传递就可以了;

首页:“pageNum=1”;

上一页:"pageNum=<?php echo $pageNum==1?1:$pageNum-1?>"

下一页:"pageNum=<?php echo $pageNum==$endPage ?$endPage :$pageNum+1?>"

尾页:“pageNum=<?php echo $pageNum =$endPage?>”;

特别注意的是,”pageNum=”的时候后面千万千万不要空格,代码如下:

  1. <a href="?pageNum=1" rel="external nofollow" rel="external nofollow" >首页</a>
  2. <a href="?pageNum=<?php echo $pageNum==1?1:($pageNum-1)?>" rel="external nofollow" rel="external nofollow" >上一页</a>
  3. <a href="?pageNum=<?php echo $pageNum==$endPage?$endPage:($pageNum+1)?>" rel="external nofollow" rel="external nofollow" >下一页</a>
  4. <a href="?pageNum=<?php echo $endPage?>" rel="external nofollow" rel="external nofollow" >尾页</a>

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>分页</title>
  6. <?php
  7. //分页的函数
  8. function news($pageNum = 1, $pageSize = 3)
  9. {
  10. $array = array();
  11. $coon = mysqli_connect("localhost", "root");
  12. mysqli_select_db($coon, "jereh");
  13. mysqli_set_charset($coon, "utf8");
  14. // limit为约束显示多少条信息,后面有两个参数,第一个为从第几个开始,第二个为长度
  15. $rs = "select * from n_content limit " . (($pageNum - 1) * $pageSize) . "," . $pageSize;
  16. $r = mysqli_query($coon, $rs);
  17. while ($obj = mysqli_fetch_object($r)) {
  18. $array[] = $obj;
  19. }
  20. mysqli_close($coon,"jereh");
  21. return $array;
  22. }
  23. //显示总页数的函数
  24. function allNews()
  25. {
  26. $coon = mysqli_connect("localhost", "root");
  27. mysqli_select_db($coon, "jereh");
  28. mysqli_set_charset($coon, "utf8");
  29. $rs = "select count(*) num from n_content"; //可以显示出总页数
  30. $r = mysqli_query($coon, $rs);
  31. $obj = mysqli_fetch_object($r);
  32. mysqli_close($coon,"jereh");
  33. return $obj->num;
  34. }
  35. @$allNum = allNews();
  36. @$pageSize = 3; //约定没页显示几条信息
  37. @$pageNum = emptyempty($_GET["pageNum"])?1:$_GET["pageNum"];
  38. @$endPage = ceil($allNum/$pageSize); //总页数
  39. @$array = news($pageNum,$pageSize);
  40. ?>
  41. </head>
  42. <body>
  43. <table cellpadding="0">
  44. <tr>
  45. <td>编号</td>
  46. <td>新闻标题</td>
  47. <td>来源</td>
  48. <td>点击率</td>
  49. <td>发布日期</td>
  50. </tr>
  51. <?php
  52. foreach($array as $key=>$values){
  53. echo "<tr>";
  54. echo "<td>{$values->id}</td>";
  55. echo "<td>{$values->title}</td>";
  56. echo "<td>{$values->src}</td>";
  57. echo "<td>{$values->indexs}</td>";
  58. echo "<td>{$values->times}</td>";
  59. echo "</tr>";
  60. }
  61. ?>
  62. </table>
  63. <div>
  64. <a href="?pageNum=1" rel="external nofollow" rel="external nofollow" >首页</a>
  65. <a href="?pageNum=<?php echo $pageNum==1?1:($pageNum-1)?>" rel="external nofollow" rel="external nofollow" >上一页</a>
  66. <a href="?pageNum=<?php echo $pageNum==$endPage?$endPage:($pageNum+1)?>" rel="external nofollow" rel="external nofollow" >下一页</a>
  67. <a href="?pageNum=<?php echo $endPage?>" rel="external nofollow" rel="external nofollow" >尾页</a>
  68. </div>
  69. </body>
  70. </html>