博客列表 >第13章 0225-PDO操作数据库技术,学习心得、笔记(员工管理系统(mysql数据库用户列表的分页显示、修改、删除),编程思路总结)

第13章 0225-PDO操作数据库技术,学习心得、笔记(员工管理系统(mysql数据库用户列表的分页显示、修改、删除),编程思路总结)

努力工作--周工--Robin
努力工作--周工--Robin原创
2021年03月05日 06:28:171115浏览

员工管理系统(mysql数据库用户列表的分页显示、修改、删除),编程思路总结

例程远行截图

" class="reference-link">

一、 架构说明

程序包含以下页面、模块

  1. 1 index.php员工列表;
  2. 2 edit.php 编辑修改页面;
  3. 3 handle.php 逻辑处理模块;
  4. 4 sql.php 数据库连接模块;

二、 sql.php 数据库连接模块说明

  1. 1、模块总体说明:sql.php数据库连接模块,负责从数据库取出指定的员工数据,赋值给变量$staffs后,再给到index.php员工列表使用;
  2. 2Sql模块有三个初始变量:
  3. $num 每页显示规定显示的用户数据条目数量,示例中规定为每页10条;
  4. $page 当是是显示第几页的数据,启动时默认为1,后面由用户点击分页按钮决定,由$_GET['p']方法获取;
  5. $offset 偏移量,指定要显示的起启行,到线束行数据,给到select语句用select * from `staffs` limit {$offset}, {$num};
  6. 3Sql模块,输出了两个变量,除了员工数据变量$staffs
  7. 还有一个$num变量,用来记录分页的数量,由"select ceil(count(*)/{$num}) total from `staffs`;"获得;
  8. 4sql模块通过require语句,导入config文件夹中的connect.php文件,获得$pdo对象;
  9. 5connect.php通过require语句,导入config文件夹中的config.php文件获得数据库配置参数;
  10. 数据库配置参数是一个关联数组,通过extract($config)语句,将其解析成独立变量后使用;

sql.php 数据库连接模块(代码)

  1. <?php
  2. require __DIR__ . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'connect.php';
  3. //每页条目数
  4. $num = 10;
  5. // 当前的页码通常是能过GET请求过来的
  6. $page = $_GET['p'] ?? 1;
  7. // 计算当前页的起始偏移量
  8. $offset = ($page - 1) * $num;
  9. //获取分页后总条目数, 使用别名total后,变量$pageNum的结果: Array( [ceil(count(*)/10)] => 8 )
  10. $sql = "select ceil(count(*)/{$num}) total from `staffs`;";
  11. $stmt = $pdo->prepare($sql);
  12. $stmt->execute();
  13. $pageNum = $stmt->fetch()['total'];
  14. //echo $pageNum;
  15. // 2. 每页要显示的数据?
  16. $sql = "select * from `staffs` limit {$offset}, {$num};";
  17. $stmt = $pdo->prepare($sql);
  18. $stmt->execute();
  19. $staffs = $stmt->fetchAll();

三、 index.php主页面说明

  1. 1index.php页面通过require语句,导入sql.php文件获得存放员工数据的变量$staffs
  2. 2Index.php页面,采用foreach ($staffs as $staff)语句循环变量$staffs,并用<?= $staff['sid'] ?>取出数据;
  3. 注:这里采和短标签语法<?= ?>,代替<?php echo ?>;
  4. 3、最后的“操作” 栏中:
  5. 编辑按钮:行内绑定onclick点击事件,跳转至handle.php模块,并传入用户sid,使用语句如下:
  6. <button onclick="location.href='edit.php?action=edit&sid=<?=$staff['sid']?>'">编辑</button>
  7. 删除按钮:行内绑定onclick点击事件,跳转至页面内建del()函数,语句如下:
  8. <button onclick="del(<?=$staff['sid']?>)">删除</button>
  9. del()函数:使用confirm()函数,加上三元选择,跳转转handle.php模块,进行删除操作,同时提示是否进行删除操作,语句如下:
  10. let url = 'handle.php?action=del&sid=' + sid;
  11. return confirm('是否删除编号为: '+sid+' 的员工数据?') ? location.href=url : false;

index.php主页面(代码)

  1. <?php require 'sql.php' ?>
  2. <!doctype html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport"
  7. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  8. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  9. <title>员工管理系统</title>
  10. <link rel="stylesheet" href="style.css">
  11. </head>
  12. <body>
  13. <table>
  14. <caption><h2>员工管理系统</h2></caption>
  15. <thead>
  16. <tr>
  17. <td>编号</td>
  18. <td>姓名</td>
  19. <td>年龄</td>
  20. <td>性别</td>
  21. <td>工资</td>
  22. <td>邮箱</td>
  23. <td>生日</td>
  24. <td>入职时间</td>
  25. <td>操作</td>
  26. </tr>
  27. </thead>
  28. <tbody>
  29. <?php foreach ($staffs as $staff) : ?>
  30. <tr>
  31. <td><?= $staff['sid'] ?></td>
  32. <td><?= $staff['name'] ?></td>
  33. <td><?= $staff['age'] ?></td>
  34. <td><?= $staff['gender']=='male' ? '男':'女' ?></td>
  35. <td><?= $staff['salary'] ?></td>
  36. <td><?= $staff['email'] ?></td>
  37. <td><?= $staff['birthday'] ?></td>
  38. <td><?= $staff['create_at'] ?></td>
  39. <td>
  40. <button onclick="location.href='edit.php?action=edit&sid=<?=$staff['sid']?>'">编辑</button>
  41. <button onclick="del(<?=$staff['sid']?>)">删除</button>
  42. </td>
  43. </tr>
  44. <?php endforeach ?>
  45. </tbody>
  46. </table>
  47. <p>
  48. <!-- 实现上一页和首页 -->
  49. <!-- 处理上一页和首页的变量和逻辑-->
  50. <?php $prev = $page==1? 1:$page-1; ?>
  51. <!-- 显示实现上一页和首页,按钮 -->
  52. <?php if($page !=1): ?>
  53. <a href="<?=$_SERVER['PHP_SELF'].'?p=1' ?>">首页</a>
  54. <a href="<?=$_SERVER['PHP_SELF'].'?p='. $prev ?>">上一页</a>
  55. <?php endif ?>
  56. <!-- 显示每一页按钮 -->
  57. <?php for ($i=1; $i<=$pageNum; $i++) : ?>
  58. <?php
  59. $jump = sprintf('%s?p=%d', $_SERVER['PHP_SELF'], $i);
  60. $active = ($i == $page) ? 'active':'';
  61. ?>
  62. <a href="<?=$jump ?>" class="<?=$active ?>"><?= $i ?></a>
  63. <?php endfor ?>
  64. <!-- 实现下一页和尾页 -->
  65. <!-- 处理下一页和尾页的变量和逻辑-->
  66. <?php $prev = $page==$pageNum? $pageNum:$page+1; ?>
  67. <!-- 显示实现上一页和首页,按钮 -->
  68. <?php if($page !=$pageNum): ?>
  69. <a href="<?=$_SERVER['PHP_SELF'].'?p='. $prev ?>">下一页</a>
  70. <a href="<?=$_SERVER['PHP_SELF'].'?p='. $pageNum?>">尾页</a>
  71. <?php endif ?>
  72. </p>
  73. </body>
  74. <script>
  75. function del(sid) {
  76. let url = 'handle.php?action=del&sid=' + sid;
  77. return confirm('是否删除编号为: '+sid+' 的员工数据?') ? location.href=url : false;
  78. }
  79. </script>
  80. </html>

四、 handle.php模块说明

  1. 1、首先handle模块通过require语句,导入config文件夹中的connect.php文件,获得$pdo对象;
  2. 2handle模块模块有两个初始变量,$action$sid,均由$_GET['']函数,从地址栏获取;
  3. $action:用来判断用户想执行的操作;
  4. $sid 将要执行操作数据的ID
  5. 3、通过switch ($action) {}语句进行判断,来选择执行的动作:
  6. case 'edit': ,跳转至edit.php用户信息修改页面,由修改好数据后,再回来处理;
  7. header('location:edit.php?sid='.$sid);
  8. case 'update': ,这里接收到edit.php页面修改的更新数据(由$_POST函数获取),来更新用户数据,
  9. 更新完成后,提示用户更新成功,并跳转index页面,语句如下:
  10. echo '<script>alert("更新成功");location.href="list.php";</script>';
  11. 注:这里的sqly语句,可以使用:name字符占位符,它可以直接使用$_POST函数生成的,关联数组,比使用? 号占位符更方便;
  12. 如果使用了?号占位符,那就要使用array_values($_POST)函数,将关联数组变成索引数组;
  13. 我的示例程序中,使用的是?号占位符,所以我使用了array_values($_POST)函数;
  14. case 'del': ,删除操作,删除完成后提示“删除成功”,语句如下:
  15. echo '<script>alert("删除成功");location.href="list.php";</script>';

handle.php模块(代码)

  1. <?php
  2. //连接数据库, 拿到PDO对象
  3. require __DIR__ . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'connect.php';
  4. //获取操作参数
  5. $action = $_GET['action'];
  6. $sid = $_GET['sid'];
  7. //print_r(array_values($_POST));
  8. //die();
  9. //执行操作,数据库的,查找、修改、删除
  10. switch ($action) {
  11. case 'edit':
  12. header('location:edit.php?sid='.$sid);
  13. break;
  14. case 'update':
  15. $sql = <<< sql
  16. update staffs set
  17. name=?,age=?,gender=?,salary=?,email=?,birthday=?
  18. where sid={$sid};
  19. sql;
  20. //// 教程中的代码
  21. // $stmt = $pdo->prepare($sql);
  22. // $stmt->execute(array_values($_POST));
  23. // 简写代码, 直接返回执行结果, 受影响的条目数量
  24. $res = $pdo->prepare($sql)->execute(array_values($_POST));
  25. // sql语句测试打印代码
  26. // echo $stmt->debugDumpParams();
  27. if ($res) {
  28. echo '<script>alert("更新成功");location.href="index.php";</script>';
  29. }
  30. break;
  31. case 'del':
  32. $sql = 'delete from `staffs` where `sid` = ?;';
  33. $stmt = $pdo->prepare($sql);
  34. $stmt->execute([$sid]);
  35. if ($stmt->rowCount() == 1) {
  36. echo '<script>alert("删除成功");location.href="index.php";</script>';
  37. }
  38. break;
  39. default:
  40. return ('非法操作...');
  41. }

五、 Edit.php修改员工数据页面说明

  1. 1、首先Edit.页面通过require语句,导入config文件夹中的connect.php文件,获得$pdo对象;
  2. 2、通过$_GET['sid']函数获取sid,在数据库获得员工信息,并展示在input输入框中;
  3. 这个功能应该要集成到handle模块中,现在为了方便,先放在这里……
  4. 3Input输入框中的name属性名,须要和数据表中的字段字一致;
  5. 4Form表单点提交按钮,采用post方式,将数据提交给handle.php模块的update部分处理,语句如下:
  6. <form action="handle.php?action=update&sid=<?=$sid?>" method="post">

Edit.php修改员工数据页面(代码)

  1. <?php
  2. //连接数据库, 拿到PDO对象
  3. require __DIR__ . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'connect.php';
  4. $sid = $_GET['sid'];
  5. $sql = 'select * from `staffs` where sid= ?';
  6. $stmt = $pdo->prepare($sql);
  7. $stmt->execute([$sid]);
  8. $staff = $stmt->fetch();
  9. //print_r($staff);
  10. ?>
  11. <!doctype html>
  12. <html lang="en">
  13. <head>
  14. <meta charset="UTF-8">
  15. <meta name="viewport"
  16. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  17. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  18. <title>修改员工信息</title>
  19. </head>
  20. <body>
  21. <form action="handle.php?action=update&sid=<?=$sid?>" method="post">
  22. <div class="box" >
  23. <div>修改员工信息</div>
  24. <div>
  25. <span>编号:</span>
  26. <input type="text" value="<?=$staff['sid'] ?>" disabled>
  27. </div>
  28. <div>
  29. <span>姓名:</span>
  30. <input type="text" name="name" value="<?=$staff['name'] ?>">
  31. </div>
  32. <div>
  33. <span>年龄:</span>
  34. <input type="text" name="age" value="<?=$staff['age'] ?>">
  35. </div>
  36. <div>
  37. <span>性别:</span>
  38. <input type="text" name="gender" value="<?=$staff['gender'] ?>">
  39. </div>
  40. <div>
  41. <span>工资:</span>
  42. <input type="text" name="salary" value="<?=$staff['salary'] ?>">
  43. </div>
  44. <div>
  45. <span>邮箱:</span>
  46. <input type="text" name="email" value="<?=$staff['email'] ?>">
  47. </div>
  48. <div>
  49. <span>生日:</span>
  50. <input type="text" name="birthday" value="<?=$staff['birthday'] ?>">
  51. </div>
  52. <div>
  53. <span>入职时间:</span>
  54. <input type="text" value="<?=$staff['create_at'] ?>" disabled>
  55. </div>
  56. <div>
  57. <button type="submit">保存</button>
  58. </div>
  59. </div>
  60. </form>
  61. </body>
  62. </html>

六、AJAX无刷新分页, 还没研究出来应该怎么做,后面研究好了再补做…

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