Blogger Information
Blog 40
fans 0
comment 1
visits 24359
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
第13章 0225-PDO操作数据库技术,学习心得、笔记(员工管理系统(mysql数据库用户列表的分页显示、修改、删除),编程思路总结)
努力工作--周工--Robin
Original
1114 people have browsed it

员工管理系统(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无刷新分页, 还没研究出来应该怎么做,后面研究好了再补做…

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