博客列表 >0512分页导航

0512分页导航

扬美刘
扬美刘原创
2020年05月14日 00:10:05795浏览

分页

总结:
首先需要知道所读数据的总数,以及每页的条数(数据偏移量),以及当前的页数;
当读取有数量比较多时,就需要分页显示;

分页时,以当前页为中心,设置左右偏移量,当前页在前面或后面时,显示2倍偏移量+1页;
当前页小于偏移量,或者当前页到最大页数时,注意要控制好起始页不能小于1,最大页不能大于总页数;

  1. <?php
  2. //1) 链接数据库
  3. // phpinfo();
  4. require ('../cms/inc/pdoconnet.php');
  5. // 2)要使用分页,需要知道所读数据的总数,以及每页的条数,即就是偏移量,以及当前的页数;
  6. // 当前的页数是从浏览器上传入,如果没有传入就默认为1;
  7. $page=$_GET['p'] ?? 1 ;
  8. // 每月的条数可以自定义,5
  9. $num=5;
  10. // 要读的数据总量
  11. $pages=$pdo->query("select CEIL(count(id)/{$num}) as total from T_user ")->fetch()['total'];
  12. // echo "当前页 {$page},每页显示数量 {$num},总页数 {$pages}";
  13. // 3)开始读出数据
  14. $sql="select * from T_user order by id asc limit {$num} offset ".$num*($page-1);
  15. $users=$pdo->query($sql)->fetchAll();
  16. // printf('<pre>%s</pre>',print_r($users,true));
  17. // 输出查询结果
  18. // 样式表
  19. $stru='
  20. <!DOCTYPE html>
  21. <html lang="en">
  22. <head>
  23. <meta charset="UTF-8">
  24. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  25. <title>Document</title>
  26. <link rel="stylesheet" href="style.css">
  27. </head>
  28. <body>';
  29. $stru.='<table><tr><th>ID</th><th>Name</th><th>Sex</th><th>Tel</th><th>Date</th><th>CURD</th>';
  30. // 在这里插入数据
  31. foreach ($users as $user){
  32. $stru.="<tr><td>{$user['ID']}</td><td>{$user['username']}</td><td>".($user['sex']? '男' : '女')."</td><td>{$user['mtel']}</td><td>".$user['regtime']."</td>";
  33. $stru.="<td><a href=''>删除</a></td>";
  34. }
  35. $stru.='</table><p>';
  36. echo $stru;
  37. // 分页开始
  38. $prev = $page - 1;
  39. if ($page == 1) $prev = 1;
  40. $next = $page + 1;
  41. if ($page == $pages) $next = $pages;
  42. // ----------设置偏移量,重置起始和结束页
  43. $pageoffset=2;
  44. // 如果总页数大于2倍偏移+1,则需要隐藏多出来的
  45. if ($pages>($pageoffset*2+1))
  46. {
  47. // 如果当前页大于偏移,说明有页数可以隐藏
  48. if (($page-$pageoffset)>0)
  49. {
  50. // 如果总页数减当前页大于偏移量,说是前面、后面有页码可以隐藏,即就是以当前页+前后偏移量
  51. if ($pages-$page>$pageoffset)
  52. {$startpage=($page-$pageoffset);
  53. $endpage=($page+$pageoffset);}
  54. // 总页数减当前页不大于偏移量,说是后面不需要隐藏,起始页就是总页数减去2倍偏移量
  55. else
  56. {$startpage=($pages-$pageoffset*2);
  57. $endpage=$pages;}
  58. }
  59. // 当前页不大于偏移量,说明前面不需要隐藏,结束页就是2倍偏移+1页,后面的隐藏
  60. else
  61. {$startpage=1;
  62. $endpage=($pageoffset*2+1);}
  63. }
  64. // 总页数不大于2倍偏移+1,前后都无需要隐藏
  65. else
  66. { $startpage=1;
  67. $endpage=$pages;
  68. }
  69. $strp = "<a href='?p=1'>首页</a><a href='?p={$prev}'>前一页</a><a href='#'>...</a>";
  70. for ($i=$startpage; $i<=$endpage; $i++){
  71. $active= ($page==$i) ? 'active' : null;
  72. $strp.= "<a href='?p={$i}' class='{$active}'>{$i}</a>";
  73. }
  74. $strp.= "<a href='#'>...</a><a href='?p={$next}'>下一页</a><a href='?p={$pages}'>尾页</a>";
  75. echo $strp;
  76. ?>
  77. </p>
  78. </body>
  79. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议