博客列表 >php:分页实现

php:分页实现

暝皑祯π_π
暝皑祯π_π原创
2020年05月18日 17:03:36920浏览

数据处理

  1. <?php
  2. // 连接数据库
  3. try {
  4. $pdo = new PDO('mysql:host=php.cn;dbname=php','root','root');
  5. // 结果集获取方式: 关联
  6. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  7. } catch (Exception $e) {
  8. die($e->getMessage());
  9. }
  10. // 当前页码
  11. $page = $_GET['p'];
  12. // 每页显示的数据量
  13. $num = '5';
  14. // 总页码
  15. $pages = $pdo->query("SELECT CEIL(COUNT(`id`)/{$num}) AS total FROM `staff` ")->fetch()['total'];
  16. // echo $pages;
  17. // 偏移量
  18. $offset = $num * ($page - 1);
  19. // echo $offset;
  20. // 分页数据
  21. $staffs = $pdo->query("SELECT * FROM `staff` LIMIT {$num} OFFSET {$offset}")->fetchAll();
  22. // print_r($staffs);

前端页面

  1. <?php require '003.php'?>
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>数据展示</title>
  8. <link rel="stylesheet" href="style.css">
  9. </head>
  10. <body>
  11. <table>
  12. <caption>员工信息</caption>
  13. <thead>
  14. <tr>
  15. <td>工号</td>
  16. <td>状态</td>
  17. <td>部门</td>
  18. <td>职务</td>
  19. <td>性别</td>
  20. </tr>
  21. </thead>
  22. <tbody>
  23. <?php foreach($staffs as $staff): ?>
  24. <tr>
  25. <td><?php echo $staff['id'] ?></td>
  26. <td><?php echo $staff['state'] ?></td>
  27. <td><?php echo $staff['section'] ?></td>
  28. <td><?php echo $staff['duty'] ?></td>
  29. <td><?php echo $staff['gender'] ?></td>
  30. </tr>
  31. <?php endforeach ?>
  32. </tbody>
  33. </table>
  34. <p>
  35. <?php
  36. // 1. 分页条显示5个页码
  37. $showPages = 5;
  38. // 2. 分页条的起始页码
  39. $startPage = 1;
  40. // 3. 分页条的终止页码
  41. $endPage = $pages; // 当前总页数: 14
  42. // 4. 分页条的偏移量: (当前分页条显示的页码数 - 1) / 2
  43. $offsetPage = ($showPages -1) / 2; // 2
  44. if($showPages < $pages){
  45. if($page > $offsetPage + 1){
  46. $startOmit = '...';
  47. }
  48. }
  49. // 将当前分页条页码重置
  50. if ($page > $offsetPage) {
  51. $startPage = $page - $offsetPage;
  52. $endPage = $page + $offsetPage;
  53. if ($endPage > $pages) {$endPage = $pages;}
  54. } else {
  55. $startPage = 1;
  56. $endPage = $showPages;
  57. }
  58. // 如果当前页 + 偏移量 > 总页数
  59. if ($page + $offsetPage > $pages) {
  60. // 原理, 就是向当前页前面进行借位
  61. // 此时, 新的起点 = 当前位置 - (当前页 + 偏移量 - 原始位置)
  62. $startPage = $startPage - ($page + $offsetPage - $endPage);
  63. }
  64. if ($showPages < $pages && $page + $offsetPage < $pages) $endOmit = '...';
  65. ?>
  66. <!-- 首页 -->
  67. <a href="<?php echo $_SERVER['PHP_SELF'] . "?p=1"?>">首页</a>
  68. <!-- 上一页 -->
  69. <?php $pre = $page - 1;
  70. if($page == 1) $pre = 1 ?>
  71. <a href="<?php echo $_SERVER['PHP_SELF'] . "?p=" . $pre ?>">上一页 </a>
  72. <!-- 省略号 -->
  73. <?php if(isset($startOmit)): ?><a href=""><?php echo $startOmit ?></a><?php endif ?>
  74. <?php for($i= $startPage; $i<= $endPage; $i++): ?>
  75. <?php $jump = sprintf('%s?p=%s', $_SERVER['PHP_SELF'], $i );
  76. $active = ($i == $page) ? 'active' :null;
  77. ?>
  78. <a href="<?php echo $jump ?>" class="<?php echo $active ?>"><?php echo $i ?></a>
  79. <?php endfor ?>
  80. <?php if (isset($endOmit)) : ?> <a href="#"><?php echo $endOmit ?></a> <?php endif ?>
  81. <!-- 下一页 -->
  82. <?php $pre = $page + 1;
  83. if($page == $pages) $pre = $pages ?>
  84. <a href="<?php echo $_SERVER['PHP_SELF'] . "?p=" . $pre ?>">下一页 </a>
  85. <!-- 尾页 -->
  86. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p='. $pages ?>">尾页</a>
  87. </p>
  88. </body>
  89. </html>

总结

  • 输入页码跳转的时候,form的method设置为get
  • 关键数据:页码,偏移量
  • 页面数据偏移量公式:每页显示的数据 * (当前页码 - 1)
  • 分页条偏移量公式:(当前分页条显示的页码数 - 1)/2
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议