批改状态:未批改
老师批语:
<?php
namespace inc;
use PDO;
class Staff
{ //1、连接数据库
private $pdo = null;
public function __construct(PDO $pdo)
{
$this->pdo = $pdo;
}
// 列出用户
// $num: 每页记录数量, $page: 当前页码
public function list($num, $page)
{
$offset = $num * ($page - 1);
$sql = "SELECT * FROM `staff` LIMIT {$num} OFFSET {$offset}";
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
// 调试: 查看生成的SQL语句
// echo $stmt->debugDumpParams();
// 将查询结果集以二维数组的方式返回
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
// 新增用户
public function insert()
{
// 对于前端发送来的JSON字符串, PHP无法直接接收解析,需要使用原始流进行接收
// file_get_contents(),将接收到的文件或内容(字符串形式)保存到变量中
// echo file_get_contents('php://input');
// die;
$jsonStr = file_get_contents('php://input');
// json_decode(),第二个参数默认为false,返回对象, true,返回数组
// $staff = json_decode($jsonStr, false);
$staff = json_decode($jsonStr, true);
if (empty($staff['name']) || empty($staff['age']) || empty($staff['position']) || empty($staff['mobile'])) {
echo json_encode(['status' => 2, 'message'=>'员工基本信息不能为空']);
exit;
}
// 入职时间默认为当前的时间戳
$staff['hiredate'] = time();
// var_dump($staff); // 数组
// die;
// extract(): 将关联数组转变量, compace(),将多个变量转关联数组
extract($staff);
// echo $name, $age, $sex, $position, $mobile, $hiredate;
// die;
// 拼装SQL语句, 考虑到INSERT 语句比较长,采用了多行字符串的语法, NOWDOC语法
$sql = <<< 'INSERT_SQL'
INSERT INTO `staff`
(`staff_id`,`name`,`age`,`sex`,`position`,`mobile`,`hiredate`)
VALUES (NULL,:name,:age,:sex,:position,:mobile, :hiredate);
INSERT_SQL;
// echo $sql; die;
// 执行SQL操作
$stmt = $this->pdo->prepare($sql);
// 将变量绑定到SQL语句模板对象: PDOStement
$stmt->bindParam('name', $name, PDO::PARAM_STR);
$stmt->bindParam('age', $age, PDO::PARAM_INT);
$stmt->bindParam('sex', $sex, PDO::PARAM_INT);
$stmt->bindParam('position', $position, PDO::PARAM_STR);
$stmt->bindParam('mobile', $mobile, PDO::PARAM_STR);
$stmt->bindParam('hiredate', $hiredate, PDO::PARAM_INT);
$stmt->execute();
// 如果直接将$staff数组做为参数传递给execute()方法, 默认都是字符类型,无法指定具体类型
// 如果涉及查询条件,会出问题,例如,显示数量等
// $stmt->execute($staff);
// echo $stmt->debugDumpParams();die;
if ($stmt->rowCount() === 1) {
$result = ['status'=>1, 'message'=>'添加成功'];
} else {
$result = ['status'=>0, 'message'=>'添加失败'];
}
// 将执行结果再经JSON格式返回到前端
echo json_encode($result);
exit();
}
// 编辑
public function update($staffId)
{
$sql = 'SELECT * FROM `staff` WHERE `staff_id` = :staff_id';
$stmt = $this->pdo->prepare($sql);
$stmt->execute(['staff_id'=>$staffId]);
$staff = [];
if ($stmt->rowCount() === 1) {
$staff = $stmt->fetch(PDO::FETCH_ASSOC);
}
echo json_encode($staff);
die;
}
// 执行编辑操作
public function doEdit()
{
$jsonStr = file_get_contents('php://input'); //php不能直接识别JSON,用这个方法接原始数据流转换成JSON 格式
// 将前端接收到的JSON转为PHP数组格式
$staff = json_decode($jsonStr, true); // 将前端接收到的JSON转为PHP数组格式
// 准备更新语句的模板 //<<< 'UPDATE_SQL定界符
$sql = <<< 'UPDATE_SQL'
UPDATE `staff`
SET `name`=:name, `age`=:age, `sex`=:sex, `position`=:position,`mobile`=:mobile
WHERE `staff_id` = :staff_id;
UPDATE_SQL;
$stmt = $this->pdo->prepare($sql);
$stmt->execute($staff);
switch ($stmt->rowCount())
{
case 0:
$result = ['status'=>0, 'message'=>'没有数据被更新'];
break;
case 1:
$result = ['status'=>1, 'message'=>'更新成功'];
break;
default:
$result = ['status'=>2, 'message'=>'未知错误或更新失败'];
}
// 将执行结果再经JSON格式返回到前端
echo json_encode($result);
exit();
}
public function find($name){
$name = isset($name)? $name : null ;
//$offset = $num * ($page - 1);
//SELECT * FROM `staff` WHERE `name` LIKE '小' LIMIT 50
// $sql = "SELECT '. * . ' FROM '.`staff`. ' WHERE '. `name` . ' LIKE ' . $name .' LIMIT ' . 50";
// $sql = "SELECT * FROM `staff` LIMIT {$num} OFFSET {$offset}";
$sql = "SELECT * FROM `staff` WHERE `name` LIKE '%{$name}%' LIMIT 5 OFFSET 0";
// 调试: 查看生成的SQL语句
// 将查询结果集以二维数组的方式返回
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
$finds=$stmt->fetchAll(PDO::FETCH_ASSOC);
// $stmt->debugDumpParams();
return $finds ;
}
// 删除操作
public function delete($id)
{
$sql = 'DELETE FROM `staff` WHERE `staff_id` = :staff_id';
$stmt = $this->pdo->prepare($sql);
$stmt->execute(['staff_id'=>$id]);
if ($stmt->rowCount() === 1) {
$result = ['status'=>1, 'message'=>'删除成功'];
} else {
$result = ['status'=>0, 'message'=>'删除失败'];
}
// 将执行结果再经JSON格式返回到前端
echo json_encode($result);
exit();
}
// 编辑
public function update1($staffId)
{
$sql = 'SELECT * FROM `staff` WHERE `staff_id` = :staff_id';
$stmt = $this->pdo->prepare($sql);
$stmt->execute(['staff_id'=>$staffId]);
$staff = [];
if ($stmt->rowCount() === 1) {
$staff = $stmt->fetch(PDO::FETCH_ASSOC);
}
echo json_encode($staff);
die;
}
// 修改密码
public function np($password)
{ //file_get_contents将真个文件读入到一个字符串
$jsonStr = file_get_contents('php://input'); //php不能直接识别JSON,用这个方法接原始数据流转换成JSON 格式
// 将前端接收到的JSON转为PHP数组格式
$staff = json_decode($jsonStr, true); // 将前端接收到的JSON转为PHP数组格式
// 准备更新语句的模板 //<<< 'UPDATE_SQL定界符
$sql = "SELECT * FROM `user` WHERE `email`='admin@php.cn'";
$stmt = $this->pdo->prepare($sql);
$stmt->execute($staff);
$stmt->debugDumpParams();
$res= $stmt->fetchAll(PDO::FETCH_ASSOC);
// echo print_r($res[0]['user_id'],true);
$sql = "UPDATE `user` SET `password`=sha1('{$password}') WHERE `user_id` = '{$res[0]['user_id']}'"; //变量加大括号,在加''号表示字符串
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
$stmt->debugDumpParams();
$result= $stmt->fetchAll(PDO::FETCH_ASSOC);
switch ($stmt->rowCount())
{
case 0:
$result = ['status'=>0, 'message'=>'密码没有更新成功'];
break;
case 1:
$result = ['status'=>1, 'message'=>'密码更新成功'];
break;
default:
$result = ['status'=>2, 'message'=>'未知错误或更新失败'];
}
// 将执行结果再经JSON格式返回到前端
echo json_encode($res[0]['user_id']);
exit();
}
// 退出登录
public function logout()
{
session_destroy();
echo json_encode(['status'=>1, 'message'=>'退出成功']);
exit;
}
}点击 "运行实例" 按钮查看在线实例
<?php
//开启会话
session_start();
//require 'caozuo.php';
// $_SERVER['QUERY_STRING']: 获取URL中的查询字符串(键值对)
// http://php.io/0620/staff_manage.php?action=list?p=1
//echo $_SERVER['REQUEST_URI'],'<br>';
// strstr($str, $searchStr, true): 返回$searchStr之前的字符,获取除页码之前的URL地址
// 使用p=当作标志位进行切割
//http://php.io/0620/staff_manage.php?action=list?
//echo strstr($_SERVER['REQUEST_URI'], 'p=', true), '<br>';
//echo $_SERVER['QUERY_STRING'],'<br>';
// 将查询字符串解析到数组中
//parse_str($_SERVER['QUERY_STRING'], $params);
//print_r($params);// Array ( [action] => list [p] => 2 )
// 连接数据库
require 'inc/connect.php';
// 加载Staff类并实例化
require 'inc/Staff.php';
$staff = new inc\Staff($pdo);
// 当前页数
// print_r($_GET);
// 当前的页码, 默认为1
$page = ($_GET['p']) ?? 1;
// 获取当前请求类型
$action = $_GET['action'];
echo $action;
// 每页显示的记录数量
$num = 6;
// 总页数= 总数据条数/每页的条数 ,然后向上取整 //这一部分是计算显示list的总页数
$sql = "SELECT CEIL(COUNT(*)/{$num}) FROM `staff`";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$total = $stmt->fetchColumn(0); //绑定0列,所有用户的索引值,从0开始
//echo $total;die;
// 判断应该执行的操作
switch ($action)
{
// 员工列表
case 'list':
$staffs = $staff->list($num, $page);
break;
// 新增员工
case 'insert':
$staff->insert();
break;
// 更新
case 'update':
$staff->update1($_GET['id']);
break;
// 更新操作
case 'doEdit':
$staff->doEdit();
break;
// 查找操作
case 'find': //这里是find操作
$staffs = $staff->find( $_GET['name']);
break;
// 删除操作
case 'delete':
$staff->delete($_GET['id']);
break;
//修改密码
case 'ps3':
echo $_GET['ps3'];
$staff->np($_GET['ps3']);
break;
// 退出登录操作
case 'logout':
$staff->logout();
break;
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="static/css/bootstrap.css">
<title>后台首页</title>
</head>
<body>
<!-- ************** 公共部分,不论什么时候都显示调用****************-->
<div class="container">
<div class="row">
<!-- 判断用户是否登录?-->
<div class="col-md-10 col-md-offset-1">
<?php if (isset($_SESSION['user_id'])) :?>
<!-- 顶部导航-->
<nav class="navbar navbar-default" style="border-radius: 0;background-color: lightblue">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">用户管理系统</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<li><a href="#"><?php echo $_SESSION['username'];?></a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">操作 <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#" type="button" data-toggle="modal" data-target="#myModal">修改密码</a></li>
<li><a href="#" onclick="logout();return false;">退出</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<!-- 显示用户信息与基本操作-->
<table class="table table-bordered table-hover">
<caption><h3 class="text-center">用户信息表</h3></caption>
<thead>
<tr class="bg-info text-center">
<td>ID</td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
<td>职位</td>
<td>手机</td>
<td>入职时间</td>
<?php if($_SESSION['username'] === 'admin') : ?>
<td>操作</td>
<?php endif; ?>
</tr>
</thead>
<tbody>
<?php foreach ($staffs as $staff ): ?>
<tr class="text-center">
<td><?php echo $staff['staff_id']?></td>
<td><?php echo $staff['name']?></td>
<td><?php echo $staff['age']?></td>
<td><?php echo $staff['sex'] ? '男' : '女' ?></td>
<td><?php echo $staff['position']?></td>
<td><?php echo $staff['mobile']?></td>
<td><?php echo date('Y-m-d',$staff['hiredate']) ?></td>
<?php if ($_SESSION['username'] === 'admin'): ?>
<td>
<button type="button" class="btn btn-info btn-sm" data-toggle="modal" data-target="#update" onclick="edit(document.forms.namedItem('update'),<?php echo $staff['staff_id']?>)">编辑</button>
<button class="btn btn-danger btn-sm" onclick="isDel(this,<?php echo $staff['staff_id'];?>)">删除</button>
</td>
<?php endif; ?>
</tr>
<?php endforeach;?>
</tbody>
</table>
<!-- 搜索功能 -->
<div class="pull-left">
<form action="" class="form-group form-inline">
<label for="search"></label>
<input type="text" class="form-control" placeholder="输入姓名" id="search">
<button class="btn btn-info btn-sm" id = 'fbtn' type="button">搜索</button>
</form>
</div>
<!-- 添加功能, 使用模态框来做-->
<div class="pull-right"><button class="btn btn-primary btn-sm" data-toggle="modal" data-target="#insert">添加</button></div>
<!-- 分页条-->
<nav class="text-center">
<ul class="pagination">
<?php
$url = strstr($_SERVER['REQUEST_URI'], 'p=', true);
// 前一页, 重点是越界处理,当前页为0时, 始终保证为1即可
$prev = $_GET['p']-1;
$prev = ($prev <= 0) ? 1 : $prev;
echo '<li><a href='.$url.'p='.$prev .'>前一页</a></li>';
for ($i = 1; $i <= $total; $i++){
// 设置当前页亮亮, 页码与当前的get参数p相等
$active = ($i == $_GET['p']) ? 'active' : '';
echo "<li class='{$active}'><a href='{$url}p={$i}'>{$i}</a></li>";
}
// 下一页: 与前一页功能类似, 重点也是对于页码越界的处理
$next = $_GET['p']+1;
// 如果当前页大于最大页码则只输出当前页,不再递增
$next = ($next >= $total) ? $total : $next;
echo '<li><a href='.$url.'p='.$next .'>下一页</a></li>';
?>
</ul>
</nav>
<?php else :?>
<script>alert('请登录');location.href='login.php';</script>
<?php endif;?>
</div>
</div>
<!--添加数据的模态框-->
<div class="modal fade" id="insert" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title text-center" id="myModalLabel">添加员工</h4>
</div>
<div class="modal-body">
<form name="insert">
<div class="form-group">
<label for="name">姓名:</label>
<input type="text" class="form-control" id="name" placeholder="Name" required>
</div>
<div class="form-group">
<label for="age">年龄</label>
<input type="number" class="form-control" id="age" min="25" placeholder="Age" required>
</div>
<div class="form-group">
<!-- label中的for也input中的id绑定, 单击会直接选择对应的按钮-->
<label for="1">性别:</label>
<!-- 后面的label,推荐将for与radio中的value属性值设置成一样的,并且value与id也一样-->
<input type="radio" id="1" name="sex" value="1" checked><label for="1">男</label>
<input type="radio" id="0" name="sex" value="0"><label for="0">女</label>
</div>
<div class="form-group">
<label for="position">职务:</label>
<input type="text" class="form-control" id="position" placeholder="Position" required>
</div>
<div class="form-group">
<label for="mobile">手机:</label>
<input type="text" class="form-control" id="mobile" placeholder="Mobile" required>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<!-- 以当前表单做为参数,调用save()函数完成数据的添加操作-->
<button type="button" class="btn btn-primary" onclick="save(document.forms.namedItem('insert'))">保存</button>
<!-- 信息提示框-->
<div class="alert alert-success pull-left" role="alert" id="alert1" style="display: none">
<!-- 登录成功-->
</div>
</div>
</div>
</div>
</div>
</div>
<!--编辑用户的模态框-->
<div class="modal fade" id="update" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title text-center" id="myModalLabel">编辑员工信息</h4>
</div>
<div class="modal-body">
<form name="update">
<div class="form-group">
<label for="name">姓名:</label>
<input type="text" class="form-control" id="name">
</div>
<div class="form-group">
<label for="age">年龄</label>
<input type="number" class="form-control" id="age" min="25">
</div>
<div class="form-group">
<!-- label中的for也input中的id绑定, 单击会直接选择对应的按钮-->
<label for="1">性别:</label>
<!-- 后面的label,推荐将for与radio中的value属性值设置成一样的,并且value与id也一样-->
<input type="radio" id="1" name="sex" value="1" checked><label for="1">男</label>
<input type="radio" id="0" name="sex" value="0"><label for="0">女</label>
</div>
<div class="form-group">
<label for="position">职务:</label>
<input type="text" class="form-control" id="position">
</div>
<div class="form-group">
<label for="mobile">手机:</label>
<input type="text" class="form-control" id="mobile">
</div>
<!-- 需要额外增加一个隐藏域,保存正在编辑的员工主键id,这是前后端数据交互的依据,这个数据不需要展现给用户-->
<input type="hidden" name="staff_id">
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<!-- 以当前表单做为参数,调用save()函数完成数据的添加操作-->
<!-- doEdit()是真正执行更新的操作, 只需要将当前表单做为参数即可, 可以通过该表单获取到所有需要更新的数据-->
<button type="button" class="btn btn-primary" onclick="doEdit(document.forms.namedItem('update'))">保存</button>
<!-- 信息提示框-->
<div class="alert alert-success pull-left" role="alert" id="alert2" style="display: none">
<!-- 保存成功-->
</div>
</div>
</div>
</div>
</div>
<!--删除操作的模态框-->
<div class="modal fade" id="delete" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<!-- <h4 class="modal-title text-center" id="myModalLabel">删除用户</h4>-->
</div>
<div class="modal-body">
<h3 class="h3 text-center">是否真的删除?</h3>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<!-- 以当前表单做为参数,调用save()函数完成数据的添加操作-->
<!-- doEdit()是真正执行更新的操作, 只需要将当前表单做为参数即可, 可以通过该表单获取到所有需要更新的数据-->
<button type="button" class="btn btn-primary" id="del">删除</button>
<!-- 信息提示框-->
<div class="alert alert-success pull-left" role="alert" id="alert2" style="display: none">
<!-- 保存成功-->
</div>
</div>
</div>
</div>
</div>
<!-- Button 修改管理员密码模态框 -->
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
<form class="form-horizontal">
<div class="form-group">
<label for="ip3" class="col-sm-2 control-label" >密码</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="ps3" placeholder="请输入要修改的密码">
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="button" class="btn btn-primary" id="ip3">保存</button>
</div>
</div>
</div>
</div>
<script src="static/js/jquery-3.4.1.js"></script>
<script src="static/js/bootstrap.js"></script>
<script>
//修改管理员密码代码
var ps3 =document.getElementById('ps3'); //密码框
var ip3 = document.getElementById('ip3'); //密码保存框按钮
ip3.onclick=function () {
console.log(ps3.value);
var res = new XMLHttpRequest();
res.onreadystatechange=function () {
if(res.readyState===4){
//console.log(res.responseText);
// var obj = (this.responseText);
//console.log(obj);
}
};
//post 发送还不熟练,先用GET发送
// res.open('post','staff_manage.php?action=ps3',true);
// res.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
// // 将表单数据打包到一个js对象中
// var obj = {
// ps3 : ps3.value,
//
// };
// // 将js对象转为json发送
// var data = JSON.stringify(obj);
// res.send(data);
res.open('POST', 'staff_manage.php?action=ps3&p=1&ps3='+ps3.value, true);
res.send(null);
};
//查找数据的代码
var fbtn = document.getElementById('fbtn');
var sc = document.getElementById('search');
fbtn.onclick=function find() {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState === 4) {
//console.log(request.responseText);
var text = request.responseText;
if(text){
location.assign('staff_manage.php?action=find&p=1&name='+sc.value);
}else if(text ===null ){
alert('什么都没有查到');
}else {
alert('查询错误');
}
}
};
request.open('GET', 'staff_manage.php?name='+sc.value, true);
request.send(null);
};
// 添加数据函数: save()
// ***************************insert事件*****************************
function save(form) {
// 表单数据的非空验证在服务器端由PHP完成
// 非空验证完成后, 获取用户的基本信息
var staffName = form.name.value;
var staffAge = form.age.value;
var staffSex = form.sex.value;
var staffPosition = form.position.value;
var staffMobile = form.mobile.value;
//获取信息提示框
var tips1 = document.getElementById('alert1');
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (this.readyState === 4) {
// console.log(this.responseText);
var obj = JSON.parse(this.responseText);
// console.log(obj);
// 将提示框显示出来
tips1.style.display = 'block';
switch (obj.status) {
case 0:
// 设置警告信息提示框的样式: 黄色背景
tips1.classList.remove('alert-success');
tips1.classList.add('alert-warning');
tips1.innerText = obj.message;
// 模块点击事件, 2秒后自动点击关闭按钮
// javascript事件模拟:http://www.php.cn/js-tutorial-423451.html
setTimeout(function () {
// 选择要被自动点击的元素,如关闭按钮
var closeBtn = document.getElementsByClassName('close').item(0);
// 创建一个鼠标标准事件对象
var event = document.createEvent('MouseEvents');
// 初始化该事件对象,设置事件类型为单击, 可冒泡, 可取消
event.initMouseEvent('click',true, true);
// 将自定义鼠标单击事件分配给该按钮
closeBtn.dispatchEvent(event);
}, 2000);
break;
case 1:
// 设置成功信息提示框的样式: 绿色背景
tips1.classList.remove('alert-warning');
tips1.classList.add('alert-success');
tips1.innerText = obj.message;
// 推荐使用一个函数来封装这个事件模拟程序,这里就直接复制了
// 模块点击事件, 2秒后自动点击关闭按钮
setTimeout(function () {
// 选择要被自动点击的元素,如关闭按钮
var closeBtn = document.getElementsByClassName('close').item(0);
// 创建一个鼠标标准事件对象
var event = document.createEvent('MouseEvents');
// 初始化该事件对象,设置事件类型为单击, 可冒泡, 可取消
event.initMouseEvent('click',true, true);
// 将自定义鼠标单击事件分配给该按钮
closeBtn.dispatchEvent(event);
}, 2000);
// 添加成功后, 自动刷新页面,显示出新增的记录
window.location.reload();
break;
case 2:
// 返回非空验证的提示信息
// 设置警告信息提示框的样式: 黄色背景
tips1.classList.remove('alert-success');
tips1.classList.add('alert-warning');
tips1.innerText = obj.message;
break;
// 如果返回了非上面的值,则提示用户
default:
tips1.innerHTML = '<span style="color:red">类型错误</span>';
}
}
};
request.open('POST', 'staff_manage.php?action=insert', true);
// 将表单数据打包到一个js对象中
var obj = {
name: staffName,
age: staffAge,
sex: staffSex,
position: staffPosition,
mobile: staffMobile
};
// 将js对象转为json发送
var data = JSON.stringify(obj);
// console.log(data);
// 设置请求头, 注意, 发送的JSON数据
request.setRequestHeader('Content-Type', 'application/json;charset=utf-8');
request.send(data); // 注意,现在发送到服务器端的是JSON字符串
}
// *****************update更新事件,先查找用户需要更新的对象****************************************
// 编辑员工信息的点击事件函数
// 编辑操作,需要一表用来编辑数据表单, 以及需要编辑的记录
// 所以,需要传入二个参数, 一个是编辑表单, 二是根据主键获取的要编辑的记录
function edit(form, id) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (this.readyState === 4) {
// console.log(this.responseText);
// 获取编辑模态框中的编辑表单
// console.log(form);
// 将服务器返回的要编辑的记录,JSON转为JS对象
var obj = JSON.parse(this.responseText);
// 将对应的数据,填充到指定的表单控件元素中
form.name.value = obj.name;
form.age.value = obj.age;
form.sex.value = obj.sex;
form.position.value = obj.position;
form.mobile.value = obj.mobile;
// 隐藏域的值
form.staff_id.value = obj.staff_id;
}
};
// GET请求, 更新操作, 需要将需要更新的员工主键ID做为参数传递到服务器端
request.open('GET', 'staff_manage.php?action=update&id='+id, true);
request.send(null);
}
//*********************doEdit将添加到数据库的新数据更新到页面******************************
// 保存已更新的员工信息操作
function doEdit(form) {
var requset = new XMLHttpRequest();
requset.onreadystatechange = function () {
if (this.readyState === 4) {
console.log(this.responseText);
// 获取信息提示框
var tips2 = document.getElementById('alert2');
// 将提示框显示出来
tips2.style.display = 'block';
var jsObj = JSON.parse(this.responseText);
switch (jsObj.status) {
case 0:
tips2.innerHTML = '<span style="color:red">'+jsObj.message+'</span>';
break;
case 1:
tips2.innerHTML = jsObj.message;
break;
case 2:
tips2.innerHTML = '<span style="color:red">'+jsObj.message+'</span>';
break;
}
// 模块点击事件, 2秒后自动点击关闭按钮
setTimeout(function () {
var closeBtn = document.getElementsByClassName('close').item(1);
// 创建一个鼠标标准事件对象
var event = document.createEvent('MouseEvents');
// 初始化该事件对象,设置事件类型为单击, 可冒泡, 可取消
event.initMouseEvent('click',true, true);
// 将自定义鼠标单击事件分配给该按钮
closeBtn.dispatchEvent(event);
}, 2000);
// 更新成功后, 自动刷新页面,显示最新数据
window.location.reload();
}
};
// 准备需要更新的数据
var $obj = {
staff_id: form.staff_id.value,
name: form.name.value,
age: form.age.value,
sex: form.sex.value,
position: form.position.value,
mobile: form.mobile.value
};
// 将JS对象转JSON字符串
var data = JSON.stringify($obj);
requset.open('POST', 'staff_manage.php?action=doEdit', true);
requset.send(data);
}
// 是否删除与执行删除操作
function isDel(ele,id) {
ele.setAttribute('data-toggle','modal');
ele.setAttribute('data-target','#delete');
// 给模态框的删除按钮添加点击事件
var delBtn = document.getElementById('del');
delBtn.onclick = function () {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (this.readyState === 4) {
// console.log(this.responseText);
var obj = JSON.parse(this.responseText);
if (obj.status === 1) {
// 为简化,这里直接用弹窗输出, 大家可以改为Bootstrap信息提示框
alert(obj.message);
}
else {
alert(obj.message);
}
// 模块点击事件, 2秒后自动点击关闭按钮
setTimeout(function () {
var closeBtn = document.getElementsByClassName('close').item(2);
// 创建一个鼠标标准事件对象
var event = document.createEvent('MouseEvents');
// 初始化该事件对象,设置事件类型为单击, 可冒泡, 可取消
event.initMouseEvent('click',true, true);
// 将自定义鼠标单击事件分配给该按钮
closeBtn.dispatchEvent(event);
}, 2000);
// 删除成功后, 自动刷新页面
window.location.reload();
}
};
request.open('GET', 'staff_manage.php?action=delete&id='+id, true);
request.send(null);
}
}
// 退出登录
function logout() {
if (confirm('是否真的退出?')) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (this.readyState === 4) {
console.log(this.responseText);
var obj = JSON.parse(this.responseText);
if (obj.status === 1) {
alert(obj.message);
location.href = 'login.php';
}
}
};
request.open('GET', 'staff_manage.php?action=logout', true);
request.send(null);
}
}
</script>
</body>
</html>
<!--该项目,还有二个功能未实现:-->
<!--1. 管理员的信息修改,如邮箱,密码-->
<!--2. 员工搜索功能,默认根据员工姓名搜索-->
<!--这是二个小作业 ,供大家周未完成-->点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号