Blogger Information
Blog 5
fans 1
comment 0
visits 3252
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
分页作业 - PHP培训十期线上班
Yin熊
Original
501 people have browsed it

一、 分页作业

趁这周末有空,完成了一下分页作业,代码整合到一个文件里来,按自己思路写的时候总体来说没什么问题,但重置分页页码那里一直没想出来。后来结合老师的代码才慢慢弄出来。

最终演示网址:演示网址

  1. <?php
  2. namespace page;
  3. use Exception;
  4. use PDO;
  5. try{
  6. $dns = 'mysql:host=localhost;port=3306;dbname=learn;charset=utf8';
  7. $pdo = new \PDO($dns,'****','****');
  8. } catch (Exception $e) {
  9. echo $e->getMessage();
  10. }
  11. // 获取记录数
  12. $sql = "select count(`id`) as total from user";
  13. $total = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  14. $num = 5; // 设置每页条数
  15. // $page = $_GET['page'] ?? 1; //获取当前页(服务器装的php5,不支持这种写法)
  16. $page = isset($_GET['page']) ? $_GET['page'] : 1; //获取当前页
  17. $page = (int)$page; // 在这不知能否过滤一些攻击
  18. $pages = ceil($total[0]['total']/$num); // 计算总页数/最后一页数
  19. $page = $page > $pages ? $pages : $page; // 当前页不能大于总页数,否则当前页为最后一页
  20. $page = $page <= 1 ? 1 : $page; // 当前页不能小于1,否则当前页为第一页
  21. $offset = $num * ($page - 1); // 计算偏移量,记录数 *( 当前页 - 1 )
  22. $sql = "select * from user limit {$num} offset {$offset}";
  23. $data = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC);
  24. ?>
  25. <!DOCTYPE html>
  26. <html lang="ZH">
  27. <head>
  28. <meta charset="UTF-8">
  29. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  30. <title>分页</title>
  31. <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/css/bootstrap.min.css" rel="stylesheet">
  32. <style>
  33. .active { color: red; }
  34. </style>
  35. </head>
  36. <body>
  37. <table class="table">
  38. <thead>
  39. <tr>
  40. <th>id</th>
  41. <th>姓名</th>
  42. <th>年龄</th>
  43. <th>性别</th>
  44. <th>工资</th>
  45. <th>出生日期</th>
  46. </tr>
  47. </thead>
  48. <tbody>
  49. <?php foreach($data as $key => $value): ?>
  50. <tr>
  51. <td><?php echo $value['id']; ?></td>
  52. <td><?php echo $value['name']; ?></td>
  53. <td><?php echo $value['age']; ?></td>
  54. <td><?php echo ($value['sex'] == 1) ? '男' : '女'; ?></td>
  55. <td><?php echo $value['salary']; ?></td>
  56. <td><?php echo date('Y-m-d',$value['createtime']); ?></td>
  57. </tr>
  58. <?php endforeach; ?>
  59. </tbody>
  60. </table>
  61. <?php
  62. /**
  63. * 此段php用来省略页码数量
  64. */
  65. // $page 当前页
  66. // $pages 总页数/最后一页
  67. $showPage = 5; // 分页条显示多少页,只能设置奇数
  68. $startPage = 1; // 分页条起始页
  69. $endPage = $pages; // 分页条结束页
  70. $sitePage = ($showPage - 1) / 2; // 分页条当前页的两边显示的页数,如,当前显示5页,当前页的左右两侧各显示两页(偏移量)
  71. // 当显示页数小于总页数当时候才显示`...`
  72. if ( $showPage < $pages ) {
  73. // 若当前页大于左边页数+1,左边显示`...`
  74. if ( $page > $sitePage + 1 ) { $startSign = '...'; }
  75. // 若当前页+右边页数小于总页数,右边显示`...`
  76. if ( $page + $sitePage < $pages ) { $endSign = '...'; }
  77. // 重置分页页码
  78. if ( $page > $sitePage ) { // 如果当前页大于左侧$sitePage个页码(不知道为什么这个作为条件),即左侧从加`...`开始
  79. $startPage = $page - $sitePage; // 重置起始页
  80. $endPage = $page + $sitePage; // 重置结束页
  81. if ( $endPage > $pages ) { $endPage = $pages; } // 上一步重置结束页后,产生多出来的结束页,去掉,使最大结束页不超过总页数。
  82. } else {
  83. $endPage = $showPage; // 重置最前的$sitePage个页码的结束页,否则会将全部页码显示出来。
  84. }
  85. // 解决最后的$sitePage个页码显示不够$showPage个页码问题
  86. if ( $page + $sitePage > $pages ) {
  87. // 此时, 新的起点 = 当前位置 - (当前页 + 偏移量 - 原始位置)
  88. $startPage = $startPage - ( $page + $sitePage -$endPage );
  89. }
  90. }
  91. ?>
  92. <div class="page" style="text-align: center">
  93. <!-- 上一页 -->
  94. <?php if($page != 1): ?>
  95. <?php
  96. $prev = ($page-1 <= 1 ) ? 1 : $page-1;
  97. $prev = sprintf('%s?page=%s',$_SERVER['PHP_SELF'], $prev)
  98. ?>
  99. <a href="<?php echo $_SERVER['PHP_SELF'] . "?page=1"; ?>">首页</a>
  100. <a href="<?php echo $prev; ?>">上一页</a>
  101. <?php endif ?>
  102. <!-- 前省略`...` -->
  103. <?php if(isset($startSign)): ?><a href="#"><?php echo $startSign; ?></a><?php endif ?>
  104. <!-- 主体页码 -->
  105. <?php for($i=$startPage;$i<=$endPage;$i++): ?>
  106. <?php
  107. $href = sprintf('%s?page=%s',$_SERVER['PHP_SELF'], $i);
  108. $active = ( $page == $i ) ? 'active' : '';
  109. ?>
  110. <a href="<?php echo $href; ?>" class="<?php echo $active; ?>"><?php echo $i; ?></a>
  111. <?php endfor ?>
  112. <!-- 后省略`...` -->
  113. <?php if(isset($endSign)): ?><a href="#"><?php echo $endSign; ?></a><?php endif ?>
  114. <!-- 下一页 -->
  115. <?php if($page != $pages): ?>
  116. <?php
  117. $next = ($page+1 >= $pages ) ? $pages : $page+1;
  118. $next = sprintf('%s?page=%s', $_SERVER['PHP_SELF'], $next)
  119. ?>
  120. <a href="<?php echo $next; ?>">下一页</a>
  121. <a href="<?php echo $_SERVER['PHP_SELF'] . "?page=" . $pages; ?>">尾页</a>
  122. <?php endif ?>
  123. <!-- 跳转功能 -->
  124. <form action="" method="get">
  125. <input type="text" name="page">
  126. <input type="submit" value="跳转">
  127. </form>
  128. </div>
  129. <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
  130. <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.min.js"></script>
  131. </body>
  132. </html>
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