博客列表 >PHP 分页功能,用户信息表的编辑与删除功能

PHP 分页功能,用户信息表的编辑与删除功能

Dong.
Dong.原创
2020年09月09日 16:28:531085浏览

1、分页功能的实现

1.1 连接数据库

  1. <?php
  2. $pdo = new PDO('mysql:host=localhost;dbname=php.edu', 'root', '61187118');
  3. // 设置结果默认获取方式: 关联数组
  4. $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

1.2 获取分页数据:每页显示的数量,计算总页数

  1. <?php
  2. // 连接数据库
  3. require 'connecter.php';
  4. // 1. 每页显示10条数
  5. $num = 10;
  6. // 2. 当前页码,默认为1
  7. $page = $_GET['p'] ?? 1;
  8. // 3. 计算每一页的第一条记录的显示偏移量
  9. $offset = ($page - 1) * $num;
  10. // 4. 获取分页数据
  11. $sql = "SELECT * FROM `users` LIMIT {$num} OFFSET {$offset}";
  12. // 简写
  13. $users = $pdo->query($sql)->fetchAll();
  14. // 总页数 = ceil(记录总数 / 每页的记录数)
  15. $sql = "SELECT CEIL(COUNT(`id`)/{$num}) AS `total` FROM `users`";
  16. // 计算总页数
  17. $pages = $pdo->query($sql)->fetch()['total'];

1.3 用户信息表数据展示

  1. <?php require 'page-data.php'
  2. // 获取分页数据PHP文件?>
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <title>数据展示</title>
  9. <link rel="stylesheet" href="style.css">
  10. </head>
  11. <body>
  12. <table>
  13. <caption>用户信息表</caption>
  14. <thead>
  15. <tr>
  16. <td>id</td>
  17. <td>name</td>
  18. <td>email</td>
  19. <td>操作</td>
  20. </tr>
  21. </thead>
  22. <tbody>
  23. <?php foreach ($users as $user):?>
  24. <tr>
  25. <!-- 短标签来简化变量的显示 -->
  26. <td><?=$user['id']?></td>
  27. <td><?php echo $user['name'] ?></td>
  28. <td><?=$user['email']?></td>
  29. <td><button>编辑</button><button>删除</button></td>
  30. </tr>
  31. <?php endforeach ?>
  32. </tbody>
  33. </table>
  34. </body>
  35. </html>

1.4 信息表样式(css样式)

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. color: #555;
  6. }
  7. body {
  8. display: flex;
  9. flex-direction: column;
  10. align-items: center;
  11. }
  12. /*表格样式*/
  13. table {
  14. width: 80%;
  15. border: 1px solid;
  16. border-collapse: collapse;
  17. text-align: center;
  18. }
  19. table caption {
  20. font-size: 1.2rem;
  21. margin: 10px;
  22. }
  23. table td,
  24. table th {
  25. border: 1px solid;
  26. padding: 5px;
  27. }
  28. table tr:hover {
  29. background-color: #eee;
  30. }
  31. table thead tr:only-of-type {
  32. background-color: lightblue;
  33. }
  34. table button {
  35. width: 56px;
  36. height: 26px;
  37. }
  38. table button:last-of-type {
  39. color: red;
  40. }
  41. table button {
  42. cursor: pointer;
  43. margin: 0 3px;
  44. }
  45. /*分页条样式*/
  46. body > p {
  47. display: flex;
  48. }
  49. p > a {
  50. text-decoration: none;
  51. color: #555;
  52. border: 1px solid;
  53. padding: 5px 10px;
  54. margin: 10px 2px;
  55. }
  56. .active {
  57. background-color: red;
  58. color: white;
  59. border: 1px solid red;
  60. }

1.5 数据展示并做简单的分页(分页页面)

  1. <?php require 'page-data.php' ?>
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>数据展示</title>
  8. <link rel="stylesheet" href="style.css">
  9. </head>
  10. <body>
  11. <table>
  12. <caption>用户信息表</caption>
  13. <thead>
  14. <tr>
  15. <td>id</td>
  16. <td>name</td>
  17. <td>email</td>
  18. <td>操作</td>
  19. </tr>
  20. </thead>
  21. <tbody>
  22. <?php foreach ($users as $user):?>
  23. <tr>
  24. <!-- 短标签来简化变量的显示 -->
  25. <td><?=$user['id']?></td>
  26. <td><?php echo $user['name'] ?></td>
  27. <td><?=$user['email']?></td>
  28. <td><button>编辑</button><button>删除</button></td>
  29. </tr>
  30. <?php endforeach ?>
  31. </tbody>
  32. </table>
  33. <p>
  34. <!-- 1. 分页条的动态生成
  35. 2. 跳转地址的动态生成
  36. 3. 当前页码的高亮显示 -->
  37. <!-- 分页条中的页码应该动态生成 -->
  38. <?php for ($i = 1; $i <= $pages; $i++): ?>
  39. <?php
  40. $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'], $i);
  41. // $i: 分页中的页码
  42. // $page: 在URL中通过GET获取的页码?p=X
  43. // 把active值变量化,判断高亮,空不亮,当前页和url的页一样时就显示高亮
  44. $active = ($i == $page) ? 'active' : null;
  45. ?>
  46. <a href="<?=$jump?>" class="<?=$active?>"><?=$i?></a>
  47. <?php endfor ?>
  48. </p>
  49. </body>
  50. </html>

2、用户信息表的编辑与删除功能

2.1 建立一个编辑页面PHP文件

  1. <?php
  2. // 获取要被编辑的数据
  3. $user = $pdo->query("SELECT * FROM `users` WHERE `id`={$id}")->fetch();
  4. // print_r($user);
  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. <!-- 用户编辑完成后,做一个跳转 -->
  16. <form action="<? echo $_SERVER['PHP_SELF']. '?action=doedit&id='.$id?>" method="POST">
  17. <p>
  18. <label for="name">用户名:</label>
  19. <input type="text" name="name" id="name" value="<?=$user['name']?>">
  20. </p>
  21. <p>
  22. <label for="email">邮箱:</label>
  23. <input type="email" name="email" id="email" value="<?=$user['email']?>">
  24. </p>
  25. <p>
  26. <button>保存</button>
  27. </p>
  28. </form>
  29. </body>
  30. </html>

2.2 获取操作,并执行编辑与删除

  1. <?php
  2. require 'connect.php';
  3. // 获取操作
  4. $action = $_GET['action'];
  5. $id = $_GET['id'];
  6. switch ($action) {
  7. // 编辑操作: 1: 渲染编辑表单; 2. 执行编辑操作
  8. // 1: 渲染编辑表单
  9. case 'edit':
  10. // 加载,渲染数据编辑表单
  11. include 'edit.php';
  12. break;
  13. // 2. 执行编辑操作
  14. case 'doedit':
  15. // 更新
  16. $sql = 'UPDATE `users` SET `name`=?, `email`=? WHERE `id`=?';
  17. $stmt = $pdo->prepare($sql);
  18. // 新的数据在$_POST
  19. if (!empty($_POST)) {
  20. // 用户编辑完成后,做一个跳转,获取数据,execute方法传参
  21. $stmt->execute([$_POST['name'], $_POST['email'], $id]);
  22. if ($stmt->rowCount() == 1) echo '<script>alert("更新成功");location.href="demo2.php"</script>';
  23. }
  24. break;
  25. // 删除,配合demo2.php
  26. case 'delete':
  27. $sql = "DELETE FROM `users` WHERE `id`=?";
  28. $stmt = $pdo->prepare($sql);
  29. $stmt->execute([$id]);
  30. if ($stmt->rowCount() == 1)
  31. {
  32. echo "<script>alert('删除成功');location.href='demo2.php'</script>";
  33. }
  34. break;
  35. }

2.3 用户信息表数据展示,实现编辑与删除

  1. <?php require 'page-data.php' ?>
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>数据展示</title>
  8. <link rel="stylesheet" href="style.css">
  9. </head>
  10. <body>
  11. <table>
  12. <caption>用户信息表</caption>
  13. <thead>
  14. <tr>
  15. <td>id</td>
  16. <td>name</td>
  17. <td>email</td>
  18. <td>操作</td>
  19. </tr>
  20. </thead>
  21. <tbody>
  22. <?php foreach ($users as $user):?>
  23. <tr>
  24. <!-- 短标签来简化变量的显示 -->
  25. <td><?=$user['id']?></td>
  26. <td><?php echo $user['name'] ?></td>
  27. <td><?=$user['email']?></td>
  28. <td>
  29. <button onclick="location.href='handle.php?action=edit&id=<?=$user['id']?>'">编辑</button>
  30. <button onclick="del(<?=$user['id']?>)">删除</button></td>
  31. </tr>
  32. <?php endforeach ?>
  33. </tbody>
  34. </table>
  35. <p>
  36. <!-- 1. 分页条的动态生成
  37. 2. 跳转地址的动态生成
  38. 3. 当前页码的高亮显示 -->
  39. <!-- 分页条中的页码应该动态生成 -->
  40. <!-- 继续完善分页功能
  41. 1. 首页
  42. 2. 尾页
  43. 3. 上一页
  44. 4. 下一页 -->
  45. <!-- 上一页: 解决页码的越界 -->
  46. <?php
  47. // 获取上一页的页码
  48. $prev = $page -1;
  49. // 解决越界问题
  50. if ($page == 1) $prev =1;
  51. ?>
  52. <?php if ($page != 1): ?>
  53. <!-- 首页 -->
  54. <a href="<?=$_SERVER['PHP_SELF'].'?p=1'?>">首页</a>
  55. <a href="<?=$_SERVER['PHP_SELF'].'?p='.$prev?>">上一页</a>
  56. <?php endif ?>
  57. <?php for ($i = 1; $i <= $pages; $i++): ?>
  58. <?php
  59. $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'], $i);
  60. // $i: 分页中的页码
  61. // $page: 在URL中通过GET获取的页码?p=X
  62. $active = ($i == $page) ? 'active' : null;
  63. ?>
  64. <a href="<?=$jump?>" class="<?=$active?>"><?=$i?></a>
  65. <?php endfor ?>
  66. <!-- 下一页: 解决页码的越界 -->
  67. <?php
  68. // 获取下一页的页码
  69. $next = $page + 1;
  70. if ($next >= $pages) $next = $pages;
  71. ?>
  72. <?php if ($page != $pages) :?>
  73. <a href="<?=$_SERVER['PHP_SELF'].'?p='.$next ?>">下一页</a>
  74. <!-- 尾页,当前页,也就是pages -->
  75. <a href="<?=$_SERVER['PHP_SELF'].'?p='.$pages?>">尾页</a>
  76. <?php endif ?>
  77. </p>
  78. <script>
  79. // 删除,配合handle.php
  80. function del(id) {
  81. var isDelete = confirm('确定删除?')
  82. if (isDelete) {
  83. location.href = 'handle.php?action=delete&id='+id;
  84. }else{
  85. return false;
  86. }
  87. }
  88. </script>
  89. </body>
  90. </html>

总结

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