登录  /  注册
博主信息
博文 100
粉丝 8
评论 2
访问量 146756
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
仿php中文网复杂分页
lilove的博客
原创
899人浏览过

在简单分页基础上进行改良,使得分页条长度限制在一定长度内

上代码:

  1. <?php
  2. // 连接数据库文件
  3. require "db.php";
  4. // 查询数据
  5. $select = "SELECT `id`,`user_name`,`password`,`user_type` FROM `user`";
  6. $data = $pdo->prepare($select);
  7. $data->execute();
  8. $res = $data->fetchAll();
  9. if ($data->rowCount() == 0) {
  10. exit("<script>
  11. alert('查询失败')
  12. </script>");
  13. }
  14. // 分页
  15. // 1.每页显示数量,由前端获取,默认为2
  16. $num = 2;
  17. // 2.当前页码,默认为1
  18. $page = $_GET['p'] ?? 1;
  19. // 3.计算每页第一条记录偏移量
  20. $offset = ($page - 1) * $num;
  21. // 4.获取分页数据
  22. $pagedata = "SELECT * FROM `user` LIMIT {$num} OFFSET {$offset}";
  23. // 语句简写
  24. // $pagedata = "SELECT * FROM `user` LIMIT {$offset}, {$num}";
  25. $users = $pdo->query($pagedata)->fetchAll();
  26. // 5.计算总页数
  27. // 计算表中共计有多少条记录,每页显示几条
  28. // 总页数=ceil(记录总数/每页的记录数):ceil()向上取整函数
  29. $sql = "SELECT CEIL(COUNT(`id`)/{$num}) AS `total` FROM `user`";
  30. $pages = $pdo->query($sql)->fetch()['total'];
  31. // 6.取选中页码和前后2页组成中间显示的5页
  32. // 要显示页码的起始页(处理越界问题)
  33. $startpage = ($page - 2) <= 0 ? 1 : ($page - 2);
  34. // 要显示页码的结束页(处理越界问题)
  35. $stoppage = ($page + 2) > $pages ? $pages : ($page + 2);
  36. // 7.翻页
  37. // 上一页
  38. $prev = ($page - 1) == 0 ? 1 : ($page - 1);
  39. // 下一页
  40. $next = ($page + 1) > $pages ? $pages : ($page + 1);
  41. ?>
  42. <!DOCTYPE html>
  43. <html lang="zh-cn">
  44. <head>
  45. <meta charset="UTF-8">
  46. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  47. <title>控制台(复杂分页)</title>
  48. </head>
  49. <style>
  50. * {
  51. margin: 0;
  52. padding: 0;
  53. box-sizing: border-box;
  54. }
  55. body {
  56. min-width: 1000px;
  57. }
  58. .tab {
  59. width: 1100px;
  60. margin: 50px auto 10px;
  61. text-align: center;
  62. border-collapse: collapse;
  63. }
  64. .tab tr:hover {
  65. background-color: rgb(240, 240, 240);
  66. }
  67. .tab th,
  68. .tab td {
  69. border: 1px solid rgb(230, 230, 230);
  70. padding: 5px 0;
  71. }
  72. .btn {
  73. width: 45px;
  74. height: 30px;
  75. border: none;
  76. color: white;
  77. border-radius: 15px;
  78. transition: 300ms;
  79. }
  80. .btn:hover {
  81. border-radius: 0;
  82. }
  83. .btn-success {
  84. background-color: rgb(0, 150, 136);
  85. }
  86. .btn-dangerous {
  87. background-color: rgb(255, 87, 34);
  88. }
  89. .container {
  90. text-align: center;
  91. }
  92. .page {
  93. font-size: 0;
  94. margin: 10px auto;
  95. }
  96. .page>.list {
  97. display: inline-block;
  98. min-width: 30px;
  99. height: 20px;
  100. font-size: 16px;
  101. }
  102. .page>.list>.link {
  103. display: block;
  104. line-height: 20px;
  105. text-align: center;
  106. padding: 5px;
  107. border: 1px solid rgb(230, 230, 230);
  108. text-decoration: none;
  109. }
  110. .page>.list>.link {
  111. border-right: none;
  112. }
  113. .page>.list:last-of-type>.link {
  114. border-right: 1px solid rgb(230, 230, 230);
  115. }
  116. .page>.list>.link:hover {
  117. color: white;
  118. background-color: rgb(75, 178, 255);
  119. }
  120. .active {
  121. color: white;
  122. background-color: rgb(30, 159, 255);
  123. }
  124. .hidden {
  125. display: none;
  126. }
  127. </style>
  128. <body>
  129. <table class="tab">
  130. <thead>
  131. <tr>
  132. <th>ID</th>
  133. <th>用户名</th>
  134. <th>密码</th>
  135. <th>用户类型</th>
  136. <th>操作</th>
  137. </tr>
  138. </thead>
  139. <tbody>
  140. <!-- 渲染表格数据 -->
  141. <?php foreach ($users as $user) : ?>
  142. <tr>
  143. <td><?php echo $user["id"] ?></td>
  144. <td><?php echo $user["user_name"] ?></td>
  145. <td><?php echo $user["password"] ?></td>
  146. <td><?php echo $user["user_type"] == 1 ? "管理员" : "非管理员" ?></td>
  147. <td>
  148. <button class="btn btn-success" onclick="location.href='handle.php?action=edit&userid=<?= $user['id'] ?>'">编辑</button>
  149. <button class="btn btn-dangerous" onclick="location.href='handle.php?action=del&userid=<?= $user['id'] ?>'">删除</button>
  150. </td>
  151. </tr>
  152. <?php endforeach ?>
  153. </tbody>
  154. </table>
  155. <!-- 复杂分页 -->
  156. <div class="container">
  157. <ul class="page">
  158. <li class="list"><a href="<?= $_SERVER['PHP_SELF'] . '?p=1' ?>" class="link">首页</a></li>
  159. <li class="list"><a href="<?= $_SERVER['PHP_SELF'] . '?p=' . $prev ?>" class="link">上一页</a></li>
  160. <!-- 总页数大于10时进行分割 -->
  161. <?php if ($pages >= 10) : ?>
  162. <li class="<?= $page <= 3 ? 'hidden' : 'list'; ?>"><a href="<?= $_SERVER['PHP_SELF'] . '?p=1' ?>" class="link">1</a></li>
  163. <li class="<?= $page <= 4 ? 'hidden' : 'list'; ?>"><a href="<?= $_SERVER['PHP_SELF'] . '?p=2' ?>" class="link">2</a></li>
  164. <!-- 判断当前页码隐藏... -->
  165. <li class="<?= $page <= 5 ? 'hidden' : 'list'; ?>"><a href="" class="link">...</a></li>
  166. <!-- 从中间页码起始页取遍历开始的值$i -->
  167. <?php for ($i = $startpage; $i <= $stoppage; $i++) : ?>
  168. <?php
  169. // $i是分页条中的页码,$page是url中get获取到的页码
  170. $active = ($i == $page) ? 'active' : null;
  171. // 用sprintf()拼接url字符串
  172. $jump = sprintf("%s?p=%s", $_SERVER['PHP_SELF'], $i);
  173. ?>
  174. <li class="list"><a href="<?= $jump ?>" class="link <?= $active ?>"><?= $i ?></a></li>
  175. <?php endfor ?>
  176. <!-- 后面的... -->
  177. <li class="<?= $page >= ($pages - 4) ? 'hidden' : 'list'; ?>"><a href="" class="link">...</a></li>
  178. <li class="<?= $page >= ($pages - 3) ? 'hidden' : 'list'; ?>"><a href="<?= $_SERVER['PHP_SELF'] . '?p=' . ($pages - 1) ?>" class="link"><?= $pages - 1 ?></a></li>
  179. <li class="<?= $page >= ($pages - 2) ? 'hidden' : 'list'; ?>"><a href="<?= $_SERVER['PHP_SELF'] . '?p=' . $pages ?>" class="link"><?= $pages ?></a></li>
  180. <?php else : ?>
  181. <!-- 如果总页码小于10时使用简单分页 -->
  182. <?php for ($i = 1; $i <= $pages; $i++) : ?>
  183. <?php
  184. // $i是分页条中的页码,$page是url中get获取到的页码
  185. $active = ($i == $page) ? 'active' : null;
  186. // 可以用sprintf()拼接url字符串
  187. $jump = sprintf("%s?p=%s", $_SERVER['PHP_SELF'], $i);
  188. ?>
  189. <li class="list"><a href="<?= $jump ?>" class="link <?= $active ?>"><?= $i ?></a></li>
  190. <?php endfor ?>
  191. <?php endif; ?>
  192. <li class="list"><a href="<?= $_SERVER['PHP_SELF'] . '?p=' . $next ?>" class="link">下一页</a></li>
  193. <li class="list"><a href="<?= $_SERVER['PHP_SELF'] . '?p=' . $pages ?>" class="link">尾页</a></li>
  194. </ul>
  195. </div>
  196. </body>
  197. </html>
  • 运行效果

总结:
1.越界问题使用判断页码长度来解决;
2.前两页和省略号,后两页和省略号的出现时机判定使用中间页面的首页与尾页来做;
3.我将页面部署到linux+php7.3.8时,对于 <?...?> 不加php无法渲染表格数据,写成 <?php...?> 后解决问题;

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:学到现在, 不会连php标签还没搞明白吧
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学