Blogger Information
Blog 9
fans 1
comment 0
visits 7037
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP分页
滑稽...
Original
1023 people have browsed it

php分页功能

1.连接数据库

  1. <?php
  2. $dsn = 'mysql:host=localhost;dbname=phpedu;charset=utf8;port=3306';
  3. $username = 'root';
  4. $password = 'root';
  5. try {
  6. $pdo = new PDO($dsn, $username, $password);
  7. // 结果集获取方式: 关联
  8. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  9. } catch (Exception $e) {
  10. die($e->getMessage());
  11. }

2.页面渲染

  1. <?php
  2. require 'createPage.php';
  3. ?>
  4. <!DOCTYPE html>
  5. <html lang="en">
  6. <head>
  7. <meta charset="UTF-8">
  8. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  9. <title>分页数据展示</title>
  10. <link rel="stylesheet" href="style.css">
  11. </head>
  12. <body>
  13. <table>
  14. <caption>员工管理系统</caption>
  15. <thead>
  16. <tr>
  17. <th>ID</th>
  18. <th>姓名</th>
  19. <th>入职时间</th>
  20. <th>操作</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. <?php foreach ($staffs as $staff) : ?>
  25. <tr>
  26. <td><?php echo $staff['id'] ?></td>
  27. <td><?php echo $staff['name'] ?></td>
  28. <td><?php echo date('Y-m-d', $staff['hiredate']) ?></td>
  29. <td><button onclick="location.href='handle.php?action=edit&id=<?php echo $staff['id'] ?>'">编辑</button>
  30. <button onclick="del(<?php echo $staff['id'] ?>)">删除</button></td>
  31. </tr>
  32. <?php endforeach; ?>
  33. </tbody>
  34. </table>
  35. <!-- 添加跳转到首页, 前一页, 下一页, 尾页的功能 -->
  36. <p>
  37. <!-- 首页-->
  38. <a href="<?php echo $_SERVER['PHP_SELF'].'?p=1'?>">首页</a>
  39. <!-- 前一页-->
  40. <a href="<?php echo $_SERVER['PHP_SELF'] .'?p='.$prev?>">前一页</a>
  41. <!-- 前面省略 -->
  42. <?php if (isset($startOmit)) : ?> <a href="<?php echo $_SERVER['PHP_SELF'].'?p=1'?>">1</a><a href="#"><?php echo $startOmit ?></a> <?php endif ?>
  43. <!-- 分页条 -->
  44. <?php for ($i = $startPage;$i <= $endPage;$i++): ?>
  45. <?php
  46. $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);
  47. $active = ($i == $page) ? 'active' : '';
  48. ?>
  49. <a href="<?= $jump?>" class="<?php echo $active ?>"><?=$i?></a>
  50. <?php endfor ?>
  51. <!-- 后面省略 -->
  52. <?php if (isset($endOmit)) : ?> <a href="#"><?php echo $endOmit ?></a> <a href="<?php echo $_SERVER['PHP_SELF'].'?p='.$total?>"><?=$total?></a><?php endif ?>
  53. <!-- 下一页-->
  54. <a href="<?php echo $_SERVER['PHP_SELF'] .'?p='.$next?>">下一页</a>
  55. <!-- 尾页-->
  56. <a href="<?php echo $_SERVER['PHP_SELF'].'?p=' .$total?>">尾页</a>
  57. <!-- 页面跳转 -->
  58. <form method="get" action="table.php">
  59. <input type="number" value="" name="p">
  60. <button>跳转</button>
  61. </form>
  62. </p>
  63. <script>
  64. function del(id) {
  65. return confirm('是否删除?') ? alert('删除成功') : false;
  66. }
  67. </script>
  68. </body>
  69. </html>

3.数据处理

  1. <?php
  2. //连接数据库
  3. require 'connect.php';
  4. //1.当前的页数/页码
  5. $page = $_GET['p'] ?? 1;
  6. if($_GET['p'] == 0){
  7. $page = 1;
  8. }
  9. //2.每页显示的记录数量
  10. $pageSize = 5;
  11. //3.总页数
  12. $sql = "SELECT CEIL(COUNT(`id`)/$pageSize) AS `total` FROM `user`";
  13. $total = $pdo->query($sql)->fetch()['total'];
  14. //4.偏移量
  15. $offset = $pageSize*($page-1);
  16. //var_dump($pageSize);
  17. //5.分页数据
  18. $sql = "SELECT * FROM `user` LIMIT {$pageSize} OFFSET {$offset}";
  19. $staffs = $pdo->query($sql)->fetchAll();
  20. /**
  21. * 前一页
  22. * 如果当前页码是第一页,页码锁定到第一页
  23. */
  24. $prev = $page - 1;
  25. if($page == 1){
  26. $prev = 1;
  27. }
  28. /**
  29. * 下一页
  30. * 如果下一页的页码大于总页数,页码锁定到总页数
  31. */
  32. $next = $page + 1;
  33. //if ($page == $total) $next = $total;
  34. if($next > $total){
  35. $next = $total;
  36. }
  37. /**
  38. * 1.分页条显示5个页码
  39. */
  40. $showPages = 5;
  41. /**
  42. * 2.分页条起始页码
  43. */
  44. $startPage = 1;
  45. /**
  46. * 3.分页条结束页码 ,等于总页数
  47. */
  48. $endPage = $total;
  49. /**
  50. * 4.分页条的偏移量: (当前分页条显示的页码数 - 1) / 2
  51. */
  52. $offsetPage = ($showPages - 1)/2;
  53. /**
  54. * 只有当前分页条数量 < 总页数, 才有必要显示出省略标记
  55. */
  56. if($showPages < $total){
  57. // 如果当前页 > 偏移量 + 1 , 应该显示前面...
  58. if($page > $offsetPage + 1){
  59. $startOmit = '...';
  60. }
  61. // 如果当前页 + 偏移量 <总页数 , 应该显示后面...
  62. if($showPages < $total && $page + $offsetPage < $total){
  63. $endOmit = '...';
  64. }
  65. // 将当前分页条页码重置
  66. if($page > $offsetPage){
  67. //如果当前分页大于分页偏移量,开始页等于当前页-分页偏移量,
  68. $startPage = $page - $offsetPage;
  69. //结束页等于当前页+分页偏移量,
  70. $endPage = $page + $offsetPage;
  71. //如果结束页大于总页数,锁定结束页
  72. if($endPage > $total) $endPage=$total;
  73. }else{
  74. $startPage = 1;
  75. $endPage = $showPages;
  76. }
  77. // 如果当前页 + 偏移量 > 总页数
  78. if ($page + $offsetPage > $total) {
  79. // 原理, 就是向当前页前面进行借位
  80. // 此时, 新的起点 = 当前位置 - (当前页 + 偏移量 - 原始位置)
  81. $startPage = $startPage - ($total + $offsetPage - $endPage);
  82. }
  83. }

总结

  • 页码偏移量:每页显示的记录数量*(当前页码-1)
  • 分页条偏移量:(当前分页条显示的页码数 - 1) / 2
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:以后放个效果图
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post