博客列表 >php分页与修改数据

php分页与修改数据

Jason
Jason原创
2020年05月17日 19:38:18646浏览

实现页码功能

通过PDO连接,读取数据库中的数据,通过php输出,那其中的分页数据怎么做呢?下面我们通过一个实例来演示

连接数据库代码

  • connect.php
  1. // 根据自己数据库的信息,创建dsn连接字符串,由三部分组成,连接信息,账号,密码
  2. $dsn = 'mysql:host=localhost;dbname=message;charset=utf8;port=3306';
  3. $username = 'root';
  4. $password = '123456';
  5. // 创建一个异常,出现异常抛出消息
  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. }

读取数据库:

  • demo1.php
  1. require 'connect.php';
  2. // 1.当前的页数
  3. $page = $_GET['p']??1;
  4. // 2.每页显示的记录数量
  5. $num = 5;
  6. // 3.总页数
  7. $sql = "SELECT CEIL(COUNT(`id`)/{$num}) AS `total` FROM `staffs`";
  8. $pages = $pdo -> query($sql) -> fetch()['total'];
  9. // 4.偏移量
  10. $offset = $num * ($page - 1);
  11. // 5.分页数据
  12. $sql = "SELECT * FROM `staffs` LIMIT {$num} OFFSET {$offset}";
  13. $staffs = $pdo->query($sql)->fetchAll();

实现分页

  1. <body>
  2. <table>
  3. <caption>员工管理系统</caption>
  4. <thead>
  5. <tr>
  6. <th>ID</th>
  7. <th>名字</th>
  8. <th>年龄</th>
  9. <th>班级</th>
  10. <th>电话</th>
  11. <th>地址</th>
  12. <th>操作</th>
  13. </tr>
  14. </thead>
  15. <tbody>
  16. <?php foreach ($staffs as $staff) : ?>
  17. <tr>
  18. <td><?php echo $staff['id'] ?></td>
  19. <td><?php echo $staff['name'] ?></td>
  20. <td><?php echo $staff['age'] ?></td>
  21. <td><?php echo $staff['class'] ?></td>
  22. <td><?php echo $staff['phone'] ?></td>
  23. <td><?php echo $staff['address'] ?></td>
  24. <td><button onclick="location.href='handle.php?action=edit&id=<?php echo $staff['id'] ?>'">编辑</button>
  25. <button onclick="del(<?php echo $staff['id'] ?>)">删除</button></td>
  26. </tr>
  27. <?php endforeach; ?>
  28. </tbody>
  29. </table>
  30. <p>
  31. <!-- 首页 -->
  32. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=1' ?>">首页</a>
  33. <?php
  34. // 1. 分页条显示5个页码
  35. $showPages = 5;
  36. // 2. 分页条的起始页码
  37. $startPage = 1;
  38. // 3. 分页条的终止页码
  39. $endPage = $pages; // 当前总页数: 14
  40. // 4. 分页条的偏移量: (当前分页条显示的页码数 - 1) / 2
  41. $offsetPage = ($showPages - 1) / 2; // 2
  42. // 只有当前分页条数量 < 总页数, 才有必要显示出省略标记
  43. if ($showPages < $pages) {
  44. // 如果当前页 > 偏移量 + 1 , 应该显示...
  45. if ($page > $offsetPage + 1) {
  46. $startOmit = '...';
  47. }
  48. // 将当前分页条页码重置
  49. if ($page > $offsetPage) {
  50. $startPage = $page - $offsetPage;
  51. $endPage = $page + $offsetPage;
  52. if ($endPage > $pages) {
  53. $endPage = $pages;
  54. }
  55. } else {
  56. $startPage = 1;
  57. $endPage = $showPages;
  58. }
  59. // 如果当前页 + 偏移量 > 总页数
  60. if ($page + $offsetPage > $pages) {
  61. // 原理, 就是向当前页前面进行借位
  62. // 此时, 新的起点 = 当前位置 - (当前页 + 偏移量 - 原始位置)
  63. $startPage = $startPage - ($page + $offsetPage - $endPage);
  64. }
  65. if ($showPages < $pages && $page + $offsetPage < $pages) $endOmit = '...';
  66. }
  67. ?>
  68. <?php if (isset($startOmit)) : ?> <a href="#"><?php echo $startOmit ?></a><?php endif ?>
  69. <!-- 前一页 -->
  70. <?php $prev = $page - 1;
  71. if ($page == 1) $prev = 1;
  72. ?>
  73. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $prev ?>">前一页</a>
  74. <?php for ($i = $startPage; $i <= $endPage; $i++) : ?>
  75. <?php
  76. $jump = sprintf('%s?p=%s', $_SERVER['PHP_SELF'], $i);
  77. $active = ($i == $page) ? 'active' : null;
  78. ?>
  79. <a href="<?php echo $jump ?>" class="<?php echo $active ?>"><?php echo $i ?></a>
  80. <?php endfor ?>
  81. <!-- 下一页 -->
  82. <?php
  83. $next = $page + 1;
  84. if ($page == $pages) $next = $pages;
  85. ?>
  86. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $next ?>">下一页</a>
  87. <?php if (isset($endOmit)) : ?> <a href="#"><?php echo $endOmit ?></a><?php endif ?>
  88. <!-- 尾页 -->
  89. <a href="<?php echo $_SERVER['PHP_SELF'] . '?p=' . $pages ?>">尾页</a>
  90. <!-- 跳转页 -->
  91. <p>
  92. <input type="summit" name="summit" id="submit">
  93. <button onclick="location.href='handle.php?action=jump ?>'">跳转</button>
  94. </p>
  95. <script>
  96. function del(id) {
  97. return confirm('是否删除?') ? alert('删除成功') : false;
  98. }
  99. </script>
  100. </p>
  101. </body>

处理脚本

  • handle.php
  1. require 'demo1.php';
  2. $action = $_GET['action'];
  3. $id = $_GET['id'];
  4. $jump = $_GET['submit'];
  5. switch($action){
  6. // 编辑需要进行两步
  7. // 1.渲染编辑表单
  8. case 'edit':
  9. include 'edit.php';
  10. break;
  11. case 'doedit':
  12. $sql = 'UPDATE `staffs` SET `name`=:name,`age`=:age,`class`=:class,`phone`=:phone,`address`=:address WHERE `id`=:id';
  13. // $sql = 'UPDATE `staffs` SET `name`=:name, `age`=:age,`sex`=:sex,`position`=:position ,`mobile`=:mobile,`hiredate`=:hiredate WHERE `id`=:id';
  14. // print_r($_POST);
  15. // $_POST['id'] = $id;
  16. $stmt = $pdo->prepare($sql);
  17. $stmt -> execute($_POST);
  18. if($stmt->rowCount() == 1 )echo '<script>alert("更新成功");location.href="demo3.php";</script>';
  19. }

编辑页面

  • edit.php
  1. // 获取信息
  2. $staff = $pdo->query("SELECT * FROM `staffs` WHERE `id`={$id}")->fetch();
  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. </head>
  11. <body>
  12. <form action="<?php echo $_SERVER['PHP_SELF'].'?action=doedit&id='.$id ?>" method="post">
  13. <p>
  14. <label for="name">名字</label>
  15. <input type="text" id="name" name="name" value="<?php echo $staff['name']?>">
  16. </p>
  17. <p>
  18. <label for="age">年龄</label>
  19. <input type="text" id="age" name="age" value="<?php echo $staff['age']?>">
  20. </p>
  21. <p>
  22. <label for="class">班级</label>
  23. <input type="text" id="class" name="class" value="<?php echo $staff['class']?>">
  24. </p>
  25. <p>
  26. <label for="phone">电话</label>
  27. <input type="text" id="phone" name="phone" value="<?php echo $staff['phone']?>">
  28. </p>
  29. <p>
  30. <label for="address">地址</label>
  31. <input type="text" id="address" name="address" value="<?php echo $staff['address']?>">
  32. </p>
  33. <button>提交</button>
  34. </body>

输出

编辑页面

总结

整个分页项目可以说是理解了,偏移量的设置,省略的处理,修改脚本的处理,但仅仅停留在理解层面,实际敲的代码,大多数跟着老师敲的,这个还需要多敲,才能记住,光理解没有用,学而不思则罔,思而不学则怠,还需要更多更多更多的敲代码,反复的敲,不能一直半吊子模样,今天敲会一点,明天敲会一点。

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