博客列表 >php分页功能案例

php分页功能案例

我是郭富城
我是郭富城原创
2020年05月17日 16:02:54878浏览

php分页功能案例

1. 基础

  • 分页关键的概念就是:索引,偏移量,单页显示数量
  • 偏移量计算公式:OFFSET = 每页显示的数量-(当前页数-1)

2. 实现分页条中的直接页码跳转功能

  • 第一步:连接数据库
  1. <?php
  2. //使用pdo的方式
  3. $dsn = 'mysql:host=localhost;dbname=php;port=3306;charset=utf8';
  4. $username = 'root';
  5. $password = 'root123456';
  6. try {
  7. $pdo = new PDO($dsn, $username, $password);
  8. // 结果集获取方式
  9. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
  10. } catch (Exception $e) {
  11. die($e->getMessage());
  12. }
  • 第二步,获取需要展示的内容
  1. <?php
  2. //1,连接数据库
  3. require_once 'connect.php';
  4. //2,当前查看的页数/页码
  5. $page = $_GET['p'] ?? 1;
  6. //3,每页显示的记录数量
  7. $num = 5;
  8. //4,总页数
  9. // 4.1首先获取一共有多少条记录数
  10. $sql = "SELECT CEIL(COUNT('id')/{$num}) AS `total` FROM `staffs`";
  11. // echo $sql;
  12. $pages = $pdo->query($sql)->fetch()['total'];
  13. //5,偏移量
  14. $offset = $num * ($page - 1);
  15. //6.分页数据
  16. $sql = "SELECT * FROM `staffs` LIMIT {$num} OFFSET {$offset}";
  17. $staffs = $pdo->query($sql)->fetchAll();
  18. // print_r($staffs);
  • 第三步,前端表格 html 代码以及 css 样式
  1. <table>
  2. <caption>
  3. 领导信息表
  4. </caption>
  5. <thead>
  6. <tr>
  7. <th>ID</th>
  8. <th>姓名</th>
  9. <th>年龄</th>
  10. <th>性别</th>
  11. <th>职位</th>
  12. <th>手机</th>
  13. <th>入职时间</th>
  14. <th>操作</th>
  15. </tr>
  16. </thead>
  17. <tbody>
  18. <?php foreach ($staffs as $staff) : ?>
  19. <tr>
  20. <td><?php echo $staff['id']; ?></td>
  21. <td><?php echo $staff['name']; ?></td>
  22. <td><?php echo $staff['age']; ?></td>
  23. <td><?php echo $staff['sex'] ? '男' : '女'; ?></td>
  24. <td><?php echo $staff['position']; ?></td>
  25. <td><?php echo $staff['mobile']; ?></td>
  26. <td><?php echo date('Y/m/d', $staff['hiredate']); ?></td>
  27. <td><button>编辑</button><button>删除</button></td>
  28. </tr>
  29. <?php endforeach; ?>
  30. </tbody>
  31. </table>
  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. color: #555;
  6. }
  7. body {
  8. display: flex;
  9. flex-flow: column nowrap;
  10. align-items: center;
  11. }
  12. table {
  13. width: 80%;
  14. border: 1px solid;
  15. border-collapse: collapse;
  16. text-align: center;
  17. }
  18. table td,
  19. table th {
  20. border: 1px solid;
  21. padding: 5px;
  22. }
  23. table caption {
  24. font-size: 1.5rem;
  25. margin: 10px;
  26. }
  27. table thead tr:only-of-type {
  28. background-color: lightblue;
  29. }
  30. table tr:hover {
  31. background-color: #eee;
  32. }
  33. table button {
  34. width: 56px;
  35. height: 26px;
  36. cursor: pointer;
  37. margin: 0 3px;
  38. }
  39. table button:last-of-type {
  40. color: red;
  41. }
  42. body > p {
  43. display: flex;
  44. }
  45. p > a {
  46. text-decoration: none;
  47. color: #555;
  48. border: 1px solid;
  49. padding: 5px 10px;
  50. margin: 10px 2px;
  51. }
  52. .active {
  53. background-color: red;
  54. color: white;
  55. border: 1px solid red;
  56. }
  • 第四步,简单分页条的实现
  1. <p>
  2. <?php
  3. $prev = $page - 1;
  4. if ($page == 1) $prev = 1;
  5. ?>
  6. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=1' ?> ">首页</a>
  7. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $prev ?> ">前一页</a>
  8. <?php for ($i = 1; $i <= $pages; $i++) : ?>
  9. <?php
  10. $jump = sprintf('%s?p=%s', $_SERVER['PHP_SELF'], $i);
  11. // echo $jump;
  12. $active = ($i == $page) ? 'active' : null;
  13. ?>
  14. <a href="<?php echo $jump ?>" class="<?php echo $active; ?>"><?php echo $i; ?></a>
  15. <?php endfor; ?>
  16. <?php
  17. $next = $page + 1;
  18. if ($page == $pages) $next = $pages;
  19. ?>
  20. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $next ?> ">下一页</a>
  21. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $pages ?> ">尾页</a>
  22. </p>

3. 实现分页条中的页码省略功能

  1. <p>
  2. <?php
  3. //显示的页码
  4. $showPages = 5;
  5. // 起始页
  6. $startPage = 1;
  7. // 终止页码
  8. $endPage = $pages;
  9. // 偏移量
  10. $offsetPage = ($showPages - 1) / 2; //2
  11. if ($showPages < $pages) {
  12. if ($page > $offsetPage + 1) {
  13. $startOmit = '...';
  14. }
  15. if ($page > $offsetPage) {
  16. $startPage = $page - $offsetPage;
  17. $endPage = $page + $offsetPage;
  18. if ($endPage > $pages) {
  19. $endPage = $pages;
  20. }
  21. } else {
  22. $startPage = 1;
  23. $endPage = $showPages;
  24. }
  25. if ($page + $offsetPage > $pages) {
  26. $startPage = $startPage - ($page + $offsetPage - $endPage);
  27. }
  28. if ($showPages < $pages && $page + $offsetPage < $pages) {
  29. $endOmit = '...';
  30. }
  31. }
  32. ?>
  33. <?php
  34. $prev = $page - 1;
  35. if ($page == 1) $prev = 1;
  36. ?>
  37. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=1' ?> ">首页</a>
  38. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $prev ?> ">前一页</a>
  39. <?php
  40. if (isset($startOmit)) { ?>
  41. <a href=""><?php echo $startOmit; ?></a>
  42. <?php } ?>
  43. <?php for ($i = $startPage; $i <= $endPage; $i++) : ?>
  44. <?php
  45. $jump = sprintf('%s?p=%s', $_SERVER['PHP_SELF'], $i);
  46. // echo $jump;
  47. $active = ($i == $page) ? 'active' : null;
  48. ?>
  49. <a href="<?php echo $jump ?>" class="<?php echo $active; ?>"><?php echo $i; ?></a>
  50. <?php endfor; ?>
  51. <?php
  52. if (isset($endOmit)) { ?>
  53. <a href=""><?php echo $endOmit; ?></a>
  54. <?php } ?>
  55. <?php
  56. $next = $page + 1;
  57. if ($page == $pages) $next = $pages;
  58. ?>
  59. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $next ?> ">下一页</a>
  60. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $pages ?> ">尾页</a>
  61. </p>

4. 实现编辑和删除功能

  • 前端按钮
  1. <td>
  2. <button onclick="location.href='handle.php?action=edit&id=<?php echo $staff['id']; ?>'">编辑</button>
  3. <button onclick="location.href='handle.php?action=del&id=<?php echo $staff['id']; ?>'">删除</button>
  4. </td>
  • 处理脚本
  1. <?php
  2. require 'demo1.php';
  3. $action = $_GET['action'];
  4. $id = $_GET['id'];
  5. switch ($action) {
  6. case 'edit':
  7. include 'edit.php';
  8. break;
  9. case 'doedit':
  10. $sql = 'UPDATE `staffs` SET `name`=:name, `age`=:age,`sex`=:sex,`position`=:position ,`mobile`=:mobile,`hiredate`=:hiredate WHERE `id`=:id';
  11. // print_r($_POST);
  12. $_POST['hiredate'] = strtotime($_POST['hiredate']);
  13. // echo $_POST['hiredate'];
  14. // die();
  15. $stmt = $pdo->prepare($sql);
  16. $stmt->execute($_POST);
  17. if ($stmt->rowCount() === 1) {
  18. echo '<script>alert("更新成功");location.href="fenye.php";</script>';
  19. }
  20. break;
  21. case 'del':
  22. include 'delete.php';
  23. break;
  24. }
  • 编辑脚本
  1. <?php
  2. //获取要被编辑的员工信息
  3. $staff = $pdo->query("SELECT * FROM `staffs` WHERE `id`={$id}")->fetch();
  4. // print_r($staff);
  5. ?>
  6. <!DOCTYPE html>
  7. <html lang="en">
  8. <head>
  9. <meta charset="UTF-8">
  10. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  11. <title>编辑</title>
  12. </head>
  13. <body>
  14. <h3>领导信息编辑表</h3>
  15. <form action="<?php echo $_SERVER['PHP_SELF'] . '?action=doedit&id=' . $id ?>" method="POST">
  16. <p>
  17. <label for="name">姓名</label>
  18. <input type="text" id="name" name="name" value="<?php echo $staff['name'] ?>">
  19. </p>
  20. <p>
  21. <label for="age">年龄:</label>
  22. <input type="number" id="age" name="age" value="<?php echo $staff['age'] ?>">
  23. </p>
  24. <input type="hidden" name="id" value="<?php echo $staff['id'] ?>">
  25. <p>
  26. <label for="sex">性别:</label>
  27. <input type="radio" id="sex" name="sex" value="1" <?php if ($staff['sex'] == 1) echo 'checked' ?>><label
  28. for=""></label>
  29. <input type="radio" id="sex" name="sex" value="0" <?php if ($staff['sex'] == 0) echo 'checked' ?>><label
  30. for=""></label>
  31. </p>
  32. <p>
  33. <label for="position">职位:</label>
  34. <input type="text" id="position" name="position" value="<?php echo $staff['position'] ?>">
  35. </p>
  36. <p>
  37. <label for="mobile">手机号:</label>
  38. <input type="text" id="tel" name="mobile" value="<?php echo $staff['mobile'] ?>">
  39. </p>
  40. <p>
  41. <label for="hiredate">手机号:</label>
  42. <input type="text" id="hiredate" name="hiredate" value="<?php echo date('Y-m-d', $staff['hiredate']) ?>">
  43. </p>
  44. <p>
  45. <button>保存</button>
  46. </p>
  47. </form>
  48. </body>
  49. </html>
  • 删除脚本
  1. <?php
  2. $sql = "DELETE FROM `staffs` WHERE `id`={$id}";
  3. $stmt = $pdo->prepare($sql);
  4. $stmt->execute();
  5. if ($stmt->rowCount() === 1) echo '<script>alert("删除成功");location.href="fenye.php";</script>';

5. 总结

本次学习分页功能,让我基本熟悉了 php 如何与 html 结合起来开发项目的认识,非常的巧妙和灵活。分页显示,将从 mysql 数据库取出的数据有规律的一段段展示,利用 sql 语句中的 limit,将它的起始数据跟页数绑定,根据页数去数据库取数据

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议