Blogger Information
Blog 36
fans 1
comment 0
visits 29916
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php分页与修改数据
Jason
Original
664 people have browsed it

实现页码功能

通过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>

输出

编辑页面

总结

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

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