博客列表 >PHP 数据分页

PHP 数据分页

王娇
王娇原创
2020年05月16日 07:32:05869浏览

演示链接

http://xuanransoftware.com/phpStudy/0513/

演示效果

学习总结

  • 把分页的数据封装在一个类中,方便前端调用
  • 输入页码跳转的时候,form的method设置为get

1.数据分页控制类 PageList.php

  1. <?php
  2. class PageList
  3. {
  4. public static $page;//当前要显示第几页
  5. public static $pageNum = 10;//一页需要显示几条数据
  6. public static $pageSum;//共有几页数据要显示
  7. public static $offset;//查询记录的偏移量,select中的offest参数
  8. public static $prevPage;//上一页
  9. public static $nextPage;//下一页
  10. public static $startPage;//页码开始的页数
  11. public static $endPage;//页码结束的页数
  12. public static $offsetPage;//页码的偏移的数量
  13. public static $showPages = 5;//一共显示的页码数
  14. public static $startOmit;//页码省略的开始标记
  15. public static $endOmit;//页码省略的结束标记
  16. public static $res;//数据库中表的结果集
  17. public function __construct($res,$page)
  18. {
  19. //获取数据库表中所有的结果集
  20. PageList::$res = $res;
  21. //总页数
  22. PageList::$pageSum = ceil(count(PageList::$res)/PageList::$pageNum);
  23. //获取当前显示的是第几页
  24. //如果当前页码<1,当前页为第一页
  25. if($page<1):
  26. $page = 1;
  27. endif;
  28. //如果当前页>总页数,当前面为最后一页
  29. if($page>PageList::$pageSum):
  30. $page = PageList::$pageSum;
  31. endif;
  32. PageList::$page = $page;
  33. //查询记录的偏移量,select中的offest参数
  34. PageList::$offset = (PageList::$page-1)*PageList::$pageNum;
  35. //上一页
  36. $prev = (PageList::$page)-1;
  37. PageList::$prevPage = ($prev<1) ? 1 : $prev;
  38. //下一页
  39. $next = PageList::$page+1;
  40. PageList::$nextPage = ($next>PageList::$pageSum) ? (PageList::$pageSum) : $next;
  41. //页码的偏移量
  42. PageList::$offsetPage = (PageList::$showPages-1)/2;
  43. //页码开始和结束页数,页码开始和结束的省略标记
  44. PageList::$startPage = 1;
  45. PageList::$endPage = PageList::$pageSum;
  46. PageList::$startOmit = null;
  47. PageList::$endOmit = null;
  48. //如果(总页数>显示的页码数量)则 设置开始结束页码和开始结束省略标记
  49. if(PageList::$pageSum>PageList::$showPages):
  50. // 如果(当前页>页码偏移量+1) 则 显示 开始省略标记
  51. if((PageList::$page)>(PageList::$offsetPage+1)):
  52. PageList::$startOmit = '...';
  53. endif;
  54. // 重置开始和结束的页码
  55. //如果(当前页>页码偏移量)
  56. if(PageList::$page>PageList::$offsetPage):
  57. //起始页码=当前页-页码偏移量
  58. PageList::$startPage = PageList::$page - PageList::$offsetPage;
  59. //结束页码=当前面+页码偏移量
  60. PageList::$endPage = PageList::$page + PageList::$offsetPage;
  61. //如果(结束页码>总页数),则结束页码=总页数
  62. if(PageList::$endPage>PageList::$pageSum) :
  63. PageList::$endPage = PageList::$pageSum;
  64. endif;
  65. else:
  66. //如果(当前页<页码偏移量),则 起始页码=第一页 结束页码=显示的页码数量
  67. PageList::$startPage = 1;
  68. PageList::$endPage = PageList::$showPages;
  69. endif;
  70. // 如果(当前页 + 偏移量) > 总页数
  71. if((PageList::$page+PageList::$offsetPage)>(PageList::$pageSum)):
  72. // 原理, 就是向当前页前面进行借位
  73. //(新的起始页码)=现在的起始页码-(当前页+页码偏移量-现在的结束页码)
  74. PageList::$startPage = PageList::$startPage-(PageList::$page+PageList::$offsetPage-PageList::$endPage);
  75. endif;
  76. // 如果 (显示页码数量<总页数)&&((当前页+页码偏移量)<总页数) 显示结束省略标记
  77. if((PageList::$showPages<PageList::$pageSum)&&((PageList::$page+PageList::$offsetPage)<PageList::$pageSum)):
  78. PageList::$endOmit = '...';
  79. endif;
  80. endif;
  81. }
  82. }
  83. ?>

2.数据分页前端代码 select.php

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <link rel="stylesheet" href="css/select.css">
  7. <title>商品查询页</title>
  8. </head>
  9. <body>
  10. <div class="show">
  11. <div class="row">
  12. <div>商品编号</div>
  13. <div>商品名称</div>
  14. <div>商品价格</div>
  15. <div>上架时间</div>
  16. </div>
  17. <?php
  18. require 'autoLoad.php';
  19. use compotents\conn\DBconn;
  20. //连接数据库,查询商品表中数据
  21. $conn = new DBconn();
  22. $table = 'tb_goods';//表名
  23. $records = $conn->select($table);//查询表中所有数据
  24. require 'pageList.php';
  25. $page = $_GET['page'] ?? 1;//设置当前访问的页数,默认是第一页
  26. $pageList = new PageList($records,$page);
  27. $records = $conn->select($table,'*','*',$pageList::$pageNum,$pageList::$offset);//查询表中当页数据
  28. foreach($records as $res):
  29. ?>
  30. <div class="row">
  31. <div><?php echo $res['id']; ?></div>
  32. <div><?php echo $res['name']; ?></div>
  33. <div><?php echo $res['price'],'元/',$res['unit']; ?></div>
  34. <div><?php echo $res['sdate']; ?></div>
  35. </div>
  36. <?php
  37. endforeach;
  38. ?>
  39. <!-- 分页条 -->
  40. <div class="pagelist">
  41. <!-- 上一页 -->
  42. <a href="<?php echo $_SERVER['PHP_SELF'] . '?page=' . $pageList::$prevPage ?>">上一页</a>
  43. <?php
  44. $self = $_SERVER['PHP_SELF'];
  45. //开始省略标记
  46. if(isset($pageList::$startOmit)):
  47. echo "<a href='{$self}?page=1'>1</a>";
  48. // 如果起始页就是第2页,则不显示第二页
  49. if($pageList::$startPage !== 2):
  50. echo "<a href='{$self}?page=2'>2</a>";
  51. endif;
  52. echo '<a href="">...</a>';
  53. endif;
  54. //中间显示的页码数
  55. for ($i = $pageList::$startPage;$i<=$pageList::$endPage;$i++):
  56. if( $i ==$pageList::$page):
  57. echo "<a href='{$self}?page={$i}' class='pageActive'>{$i}</a>";
  58. else:
  59. echo "<a href='{$self}?page={$i}'>{$i}</a>";
  60. endif;
  61. endfor;
  62. //结束省略标记
  63. if(isset($pageList::$endOmit)):
  64. $sumPrev =intval($pageList::$pageSum-1) ;//总页数的上一面
  65. echo '<a href="">...</a>';
  66. if($pageList::$endPage !== $sumPrev):
  67. echo "<a href='{$self}?page={$sumPrev}'>{$sumPrev}</a>";
  68. endif;
  69. echo "<a href='{$self}?page={$pageList::$pageSum}'>{$pageList::$pageSum}</a>";
  70. endif;
  71. ?>
  72. <!-- 下一页 -->
  73. <a href="<?php echo $_SERVER['PHP_SELF'] . '?page=' . $pageList::$nextPage ?>">下一页</a>
  74. <form action="<?php echo $self; ?>" method="GET">
  75. <input type="number" name="page" id="page" value="1">
  76. <button type="submit">GO</button>
  77. </form>
  78. </div>
  79. </div>
  80. </body>
  81. </html>

3.更新操作前端代码 update.php

  1. <?php
  2. session_start();
  3. if(!(isset($_SESSION['userNc']))):
  4. exit('<script>alert("您还未登录,请登录后操作");location.href="session/login.php";</script>');
  5. endif;
  6. ?>
  7. <!DOCTYPE html>
  8. <html lang="en">
  9. <head>
  10. <meta charset="UTF-8">
  11. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  12. <link rel="stylesheet" href="css/select.css">
  13. <title>商品修改页</title>
  14. </head>
  15. <body>
  16. <div class="show">
  17. <div class="row">
  18. <div>商品编号</div>
  19. <div>商品名称</div>
  20. <div>价格/单位</div>
  21. <div>上架时间</div>
  22. <div>更新操作</div>
  23. </div>
  24. <?php
  25. require 'autoLoad.php';
  26. use compotents\conn\DBconn;
  27. //连接数据库,查询商品表中数据
  28. $conn = new DBconn();
  29. $table = 'tb_goods';//表名
  30. $records = $conn->select($table);//查询表中所有数据
  31. require 'pageList.php';
  32. $page = $_GET['page'] ?? 1;//设置当前访问的页数,默认是第一页
  33. $pageList = new PageList($records,$page);
  34. $records = $conn->select($table,'*','*',$pageList::$pageNum,$pageList::$offset);//查询表中当页数据
  35. foreach($records as $res):
  36. ?>
  37. <div class="row">
  38. <form action="handle.php?action=update&id=<?php echo $res['id']; ?>" method="POST">
  39. <div style="width:100px"><?php echo $res['id']; ?></div>
  40. <input type="text" name="goodsName" id="goodsName" style="width:120px"
  41. value="<?php echo $res['name']; ?>">
  42. <div>
  43. <input type="text" name="goodsPrice" id="goodsPrice" style="width:50px"
  44. value="<?php echo $res['price']; ?>">/
  45. <input type="text" name="goodsUnit" id="goodsUnit" style="width:50px"
  46. value="<?php echo $res['unit']; ?>">
  47. </div>
  48. <input type="date" name="goodSdate" id="goodSdate" style="width:120px"
  49. value="<?php echo $res['sdate']; ?>">
  50. <div style="width:120px"><button type="submit">修改</button></div>
  51. </form>
  52. </div>
  53. <?php
  54. endforeach;
  55. ?>
  56. <!-- 分页条 -->
  57. <div class="pagelist">
  58. <!-- 上一页 -->
  59. <a href="<?php echo $_SERVER['PHP_SELF'] . '?page=' . $pageList::$prevPage ?>">上一页</a>
  60. <?php
  61. $self = $_SERVER['PHP_SELF'];
  62. //开始省略标记
  63. if(isset($pageList::$startOmit)):
  64. echo "<a href='{$self}?page=1'>1</a>";
  65. // 如果起始页就是第2页,则不显示第二页
  66. if($pageList::$startPage !== 2):
  67. echo "<a href='{$self}?page=2'>2</a>";
  68. endif;
  69. echo '<a href="">...</a>';
  70. endif;
  71. //中间显示的页码数
  72. for ($i = $pageList::$startPage;$i<=$pageList::$endPage;$i++):
  73. if( $i ==$pageList::$page):
  74. echo "<a href='{$self}?page={$i}' class='pageActive'>{$i}</a>";
  75. else:
  76. echo "<a href='{$self}?page={$i}'>{$i}</a>";
  77. endif;
  78. endfor;
  79. //结束省略标记
  80. if(isset($pageList::$endOmit)):
  81. $sumPrev =intval($pageList::$pageSum-1) ;//总页数的上一面
  82. echo '<a href="">...</a>';
  83. if($pageList::$endPage !== $sumPrev):
  84. echo "<a href='{$self}?page={$sumPrev}'>{$sumPrev}</a>";
  85. endif;
  86. echo "<a href='{$self}?page={$pageList::$pageSum}'>{$pageList::$pageSum}</a>";
  87. endif;
  88. ?>
  89. <!-- 下一页 -->
  90. <a href="<?php echo $_SERVER['PHP_SELF'] . '?page=' . $pageList::$nextPage ?>">下一页</a>
  91. <form action="<?php echo $self; ?>" method="GET">
  92. <input type="number" name="page" id="page" value="1">
  93. <button type="submit">GO</button>
  94. </form>
  95. </div>
  96. </div>
  97. </body>
  98. </html>

4.删除操作前端代码 delete.php

  1. <?php
  2. session_start();
  3. if(!(isset($_SESSION['userNc']))):
  4. exit('<script>alert("您还未登录,请登录后操作");location.href="session/login.php";</script>');
  5. endif;
  6. ?>
  7. <!DOCTYPE html>
  8. <html lang="en">
  9. <head>
  10. <meta charset="UTF-8">
  11. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  12. <link rel="stylesheet" href="css/select.css">
  13. <title>商品删除页</title>
  14. </head>
  15. <body>
  16. <div class="show">
  17. <div class="row">
  18. <div>商品编号</div>
  19. <div>商品名称</div>
  20. <div>商品价格</div>
  21. <div>上架时间</div>
  22. <div>删除操作</div>
  23. </div>
  24. <?php
  25. require 'autoLoad.php';
  26. use compotents\conn\DBconn;
  27. //连接数据库,查询商品表中数据
  28. $conn = new DBconn();
  29. $table = 'tb_goods';//表名
  30. $records = $conn->select($table);//查询表中所有数据
  31. require 'pageList.php';
  32. $page = $_GET['page'] ?? 1;//设置当前访问的页数,默认是第一页
  33. $pageList = new PageList($records,$page);
  34. $records = $conn->select($table,'*','*',$pageList::$pageNum,$pageList::$offset);//查询表中当页数据
  35. foreach($records as $res):
  36. ?>
  37. <div class="row">
  38. <div><?php echo $res['id']; ?></div>
  39. <div><?php echo $res['name']; ?></div>
  40. <div><?php echo $res['price'],'元/',$res['unit']; ?></div>
  41. <div><?php echo $res['sdate']; ?></div>
  42. <div><a href="handle.php?action=delete&id=<?php echo $res['id']; ?>">删除</a></div>
  43. </div>
  44. <?php
  45. endforeach;
  46. ?>
  47. <!-- 分页条 -->
  48. <div class="pagelist">
  49. <!-- 上一页 -->
  50. <a href="<?php echo $_SERVER['PHP_SELF'] . '?page=' . $pageList::$prevPage ?>">上一页</a>
  51. <?php
  52. $self = $_SERVER['PHP_SELF'];
  53. //开始省略标记
  54. if(isset($pageList::$startOmit)):
  55. echo "<a href='{$self}?page=1'>1</a>";
  56. // 如果起始页就是第2页,则不显示第二页
  57. if($pageList::$startPage !== 2):
  58. echo "<a href='{$self}?page=2'>2</a>";
  59. endif;
  60. echo '<a href="">...</a>';
  61. endif;
  62. //中间显示的页码数
  63. for ($i = $pageList::$startPage;$i<=$pageList::$endPage;$i++):
  64. if( $i ==$pageList::$page):
  65. echo "<a href='{$self}?page={$i}' class='pageActive'>{$i}</a>";
  66. else:
  67. echo "<a href='{$self}?page={$i}'>{$i}</a>";
  68. endif;
  69. endfor;
  70. //结束省略标记
  71. if(isset($pageList::$endOmit)):
  72. $sumPrev =intval($pageList::$pageSum-1) ;//总页数的上一面
  73. echo '<a href="">...</a>';
  74. if($pageList::$endPage !== $sumPrev):
  75. echo "<a href='{$self}?page={$sumPrev}'>{$sumPrev}</a>";
  76. endif;
  77. echo "<a href='{$self}?page={$pageList::$pageSum}'>{$pageList::$pageSum}</a>";
  78. endif;
  79. ?>
  80. <!-- 下一页 -->
  81. <a href="<?php echo $_SERVER['PHP_SELF'] . '?page=' . $pageList::$nextPage ?>">下一页</a>
  82. <form action="<?php echo $self; ?>" method="GET">
  83. <input type="number" name="page" id="page" value="1">
  84. <button type="submit">GO</button>
  85. </form>
  86. </div>
  87. </div>
  88. </body>
  89. </html>

5.CURD综合处理代码 handle.php

  1. <?php
  2. require 'autoLoad.php';
  3. use compotents\conn\DBconn;
  4. $user =new DBconn();
  5. $table = 'tb_goods';//表名
  6. $where =''; //判断的条件
  7. $data =[];//添加或者更新的数据
  8. $action = $_GET['action'];
  9. switch ($action)
  10. {
  11. case 'insert':
  12. $name = $_POST['goodsName'];
  13. $price = $_POST['goodsPrice'];
  14. $unit = $_POST['goodsUnit'];
  15. $date = $_POST['goodsSdate'];
  16. $data = ['name'=>"$name",'price'=>"$price",'unit'=>"$unit",'sdate'=>"$date"];
  17. $user->insert($table,$data);
  18. break;
  19. case 'update':
  20. $id = $_GET['id'];
  21. $name = $_POST['goodsName'];
  22. $price = $_POST['goodsPrice'];
  23. $unit = $_POST['goodsUnit'];
  24. $sdate = $_POST['goodSdate'];
  25. $where = "`id`=$id";
  26. $data = ['name'=>"$name",'price'=>"$price",'unit'=>"$unit",'sdate'=>"$sdate"];
  27. $user->update($table,$data,$where);
  28. break;
  29. case 'delete':
  30. $id = $_GET['id'];
  31. $where = "`id`=$id";
  32. $user->delete($table,$where);
  33. break;
  34. default:
  35. echo '不支持此操作';
  36. }
  37. ?>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议