今天,课上学习了员工管理系统的添加 删除 修改,作业时作出软删除。废话不多说上代码,谈逻辑。
一、实现添加功能
在staff_list上的添加按钮设置导航到,staff_add.php,然后新建staff_add.php,然后构建前端页面,在新增按钮设置add方法传入this.form,重点在js的add方法,add方法中要做ajax数据提交将form下的name age position sex mobile的值传递到staff_manage.php,这里需要注意的是,提交按钮里面需要连接到staff_manage,将action=add通过get方法传过来;然后在staff_manage连接数据库,将cation复制给$action,switch判断,当action为add时,那么就执行添加数据到数据库的操作,然后判断,当数据库添加操作被执行时——》(然后再进行判断,影响行数为1时,status为1,message为添加数据成功;影响行数为0时,status为0,message为没有添加数据);数据库没有执行操作时——》(status为-1,message为操作错误),判断完成后,把status和message专程json格式传回前端staff_add,staff_add页面在ajax返回响应数据阶段,判断如果status时1添加正确css样式,否则为错误样式,然后把message赋给tips的内容,再添加定时器要2秒钟后返回index,至此添加功能完成。
<?php session_start(); ?>
<?php if (!isset($_SESSION['username'])): ?>
<style>h2,p{text-align: center;margin-top: 50px;}</style>
<h2>您还没有登录呢~~</h2>
<p>正在跳转到登录页面...</p>
<script>
setTimeout("location.assign('login.php')", 2000);
</script>
<?php else:?>
<!doctype html>
<html lang="zh-cn">
<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">
<title>添加员工</title>
<style>
h3 {
text-align: center;
}
div {
width: 300px;
height: 260px;
/*background-color: lightblue;*/
margin: 0 auto;
text-align: center;
padding: 20px;
border: 1px dashed #888;
border-radius: 5%;
}
div input {
background-color: transparent;
border: none;
border-bottom: 1px solid #333;
}
button:hover {
cursor: pointer;
background-color: lightblue;
}
.success {
color: green;
}
.error {
color: red;
}
</style>
</head>
<body>
<h3>添加员工</h3>
<div>
<form name="user">
<p>
<label for="name">姓名:</label>
<input type="text" name="name" id="name" value="">
</p>
<p>
<label for="age">年龄:</label>
<input type="number" name="age" id="age" value="">
</p>
<p>
<label for="position">职位:</label>
<input type="text" name="position" id="position" value="">
</p>
<p>
<label for="mobile">手机:</label>
<input type="text" name="mobile" id="mobile" value="">
</p>
<p style="margin-left: -55px;">性别:
<input type="radio" id="male" name="sex" value="1" checked><label for="male">男</label>
<input type="radio" id="female" name="sex" value="0"><label for="female">女</label>
</p>
<p>
<button type="button" onclick="add(this.form)">新增</button>
<button type="button" onclick="history.back()">取消</button>
</p>
<!-- 提示占位符-->
<p></p>
</form>
</div>
<script>
function add(form) {
// ajax方式交互数据
var request = new XMLHttpRequest();
// 请求完成获得相应数据
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
// 将返回的json字符串解析成对象
var data = JSON.parse(request.responseText);
// 获取tips元素
var tips = form.lastElementChild;
tips.innerText = data.message;
// 判断返回来的status值 1 成功 反之错误
if (data.status === 1) {
tips.classList.add('success');
} else {
tips.classList.add('error');
}
// 两秒后 返回上一层也就是staff_list
setTimeout(function(){
history.back();
top.location.reload();
},2000);
}
};
//配置请求信息
request.open('POST', 'staff_manage.php?action=add');
// ajax请求头
request.setRequestHeader('content-type','application/x-www-form-urlencoded');
// 发送的数据集合成json数据
var data = {
name:form.name.value,
age:form.age.value,
position:form.position.value,
mobile:form.mobile.value,
sex:form.sex.value
};
var staff = 'name=' + data.name +
'&age=' + data.age +
'&position=' + data.position +
'&sex=' + data.sex +
'&mobile=' + data.mobile;
// 发送请求数据
request.send(staff);
}
</script>
</body>
</html>
<?php endif?>点击 "运行实例" 按钮查看在线实例
二、更新操作
更新操作总体思路和添加一样,也是通过get传给staff_manage一个action=save值 ,通过判断save后然后在执行更新操作,根据执行结果返回响应的status值和message值给前台,前台在进行相应的样式添加。这里的细节主要有,在staff_list的编辑按钮通过隐藏域,把数据库中的id用get方式传递到新建页面staff_edit页面,这也页面的样式同添加页面一直,只不过表单的值时通过id然后数据库查询添加上去的,这里的修改提交按钮还是通过ajax异步post传给staff_manage,然后在进行数据库操作。
<?php
//echo $_GET['id'];
//连接数据库
$pdo = new PDO('mysql:dbname=php', 'root', 'root');
//获取准备对象
$stmt = $pdo->prepare("SELECT * FROM `staff` WHERE `id`=:id");
//$stmt->debugDumpParams();
//执行操作
$stmt->execute(['id'=>$_GET['id']]);
//获取记录
$staff = $stmt->fetch(PDO::FETCH_ASSOC);
//print_r($staff);
?>
<!doctype html>
<html lang="zh-cn">
<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">
<title>编辑员工</title>
<style>
h3 {
text-align: center;
}
div {
width: 300px;
height: 260px;
/*background-color: lightblue;*/
margin: 0 auto;
text-align: center;
padding: 20px;
border: 1px dashed #888;
border-radius: 5%;
}
div input {
background-color: transparent;
border: none;
border-bottom: 1px solid #333;
color: #777;
text-align: center;
font-size: inherit;
}
button:hover {
cursor: pointer;
background-color: lightblue;
}
.success {
color: green;
}
.error {
color: red;
}
</style>
</head>
<body>
<h3>编辑员工</h3>
<div>
<form name="user">
<p>
<label for="name">姓名:</label>
<input type="text" name="name" id="name" value="<?=$staff['name']?>">
</p>
<p>
<label for="age">年龄:</label>
<input type="number" name="age" id="age" value="<?=$staff['age']?>">
</p>
<p>
<label for="position">职位:</label>
<input type="text" name="position" id="position" value="<?=$staff['position']?>">
</p>
<p>
<label for="mobile">手机:</label>
<input type="text" name="mobile" id="mobile" value="<?=$staff['mobile']?>">
</p>
<p style="margin-left: -55px;">性别:
<input type="radio" id="male" name="sex" value="1"><label for="male">男</label>
<input type="radio" id="female" name="sex" value="0"><label for="female">女</label>
</p>
<script>
var male = document.getElementById('male');
var female = document.getElementById('female');
// 将male female的值变成整数 然后判断是否checked
if (parseInt(male.value) === <?= $staff['sex']?>) {
male.checked = true;
}
if (parseInt(female.value) === <?= $staff['sex']?>) {
female.checked = true;
}
</script>
<p><input type="hidden" name="id" value="<?= $staff['id']?>"></p>
<p>
<button type="button" onclick="save(this.form)">修改</button>
<button type="button" onclick="history.back()">取消</button>
</p>
<!-- 提示占位符-->
<p></p>
</form>
</div>
</body>
<script>
function save(form) {
// 用ajax方式将数据异步提交
var request = new XMLHttpRequest();
// 请求完成获得响应数据
request.onreadystatechange = function () {
if (request.readyState === 4 && request.status === 200) {
var data = JSON.parse(request.responseText);
var tips = form.lastElementChild;
tips.innerText = data.message;
if (data.status === 1) {
tips.classList.add('success');
} else {
tips.classList.add('error');
}
setTimeout(function () {
history.back();
top.location.reload();
}, 2000);
}
};
// 配置请求信息
request.open('POST', "staff_manage.php?action=save");
// post方式请求头
request.setRequestHeader('content-type','application/x-www-form-urlencoded');
// 设置数据
var data = {
name:form.name.value,
age:form.age.value,
position:form.position.value,
sex:form.sex.value,
mobile:form.mobile.value,
id:form.id.value
};
var staff = 'name=' + data.name +
'&age=' + data.age +
'&position=' + data.position +
'&sex=' + data.sex +
'&mobile=' + data.mobile +
'&id=' + data.id;
// 发送请求数据
request.send(staff);
}
</script>
</html>点击 "运行实例" 按钮查看在线实例
三、删除操作
在staff_list里的按钮设置超链接 confirm(‘是否删除’)?location.assign('staff_manage.php?action=del&id=<?=$staff['id']?>') : false" 然后在staff_manage del方法,如果执行成功就弹窗删除成功。
<?php
//连接数据库
$pdo = new PDO('mysql:dbname=php','root','root');
//获取action的get传值
$action = strtolower(trim($_GET['action']));
//根据action值判断应该采用的处理方法
switch ($action) {
// 新增方法
case 'add':
// 新增sql语句
$sql = 'INSERT INTO `staff`
(`name`, `age`, `sex`, `position`, `mobile`, `hiredate`) VALUES
(:name, :age, :sex, :position, :mobile, :hiredate);';
// 准备对象
$stmt = $pdo->prepare($sql);
// 将post传过来的值赋给相应的变量
$name = trim($_POST['name']);
$age = trim($_POST['age']);
$sex = trim($_POST['sex']);
$position = trim($_POST['position']);
$mobile = trim($_POST['mobile']);
$hiredate = time();
// 数据绑定
$stmt->bindValue('name', $name, PDO::PARAM_STR);
$stmt->bindValue('age', $age, PDO::PARAM_INT);
$stmt->bindValue('sex', $sex, PDO::PARAM_INT);
$stmt->bindValue('position', $position, PDO::PARAM_STR);
$stmt->bindValue('mobile', $mobile, PDO::PARAM_STR);
$stmt->bindValue('hiredate', $hiredate, PDO::PARAM_INT);
// 如果执行成功,切影响行数等于1那么就是新增成功了
if($stmt->execute()){
if ($stmt->rowCount() == 1) {
$status = 1;
$message = '新增成功';
} elseif ($stmt->rowCount() == 0) {
$status = 0;
$message = '没有新增';
}
} else {
$status = -1;
$message = '发生错误';
}
// 输出json格式的status message值
echo json_encode(['status'=>$status, 'message'=>$message]);
break;
case 'save':
$sql = "UPDATE `staff`
SET `name`=:name, `age`=:age, `position`=:position, `sex`=:sex, `mobile`=:mobile
WHERE `id`=:id";
$stmt = $pdo->prepare($sql);
$name = trim($_POST['name']);
$age = trim($_POST['age']);
$position = trim($_POST['position']);
$sex = trim($_POST['sex']);
$mobile = trim($_POST['mobile']);
$id = trim($_POST['id']);
$stmt->bindValue('name', $name, PDO::PARAM_STR);
$stmt->bindValue('age', $age, PDO::PARAM_INT);
$stmt->bindValue('position', $position, PDO::PARAM_STR);
$stmt->bindValue('sex', $sex, PDO::PARAM_INT);
$stmt->bindValue('mobile', $mobile, PDO::PARAM_STR);
$stmt->bindValue('id', $id, PDO::PARAM_INT);
if ($stmt->execute()) {
if ($stmt->rowCount() == 1) {
$status = 1;
$message = '更新成功';
} else if ($stmt->rowCount() == 0) {
$status = 0;
$message = '没有更新数据';
}
} else {
$status = -1;
$message = '更新发送错误';
}
echo json_encode(['status'=>$status, 'message'=>$message]);
break;
case 'del':
/*
* 这是正常删除
* $sql = 'DELETE FROM `staff` WHERE `id`=:id';
$stmt = $pdo->prepare($sql);
if ($stmt->execute(['id'=>$_GET['id']])) {
echo "<script>alert('删除成功');location.assign('index.php')</script>";
}*/
/*软删除*/
$sql = "UPDATE `staff` SET `is_show`=0 WHERE `id`=:id";
$stmt = $pdo->prepare($sql);
if ($stmt->execute(['id'=>$_GET['id']])) {
echo "<script>alert('删除成功');location.assign('index.php')</script>";
}
}点击 "运行实例" 按钮查看在线实例
四、作业:软删除
通过在数据库添加is_show字段,默认值为1显示,0为不显示,然后在staff_manage中的del中设置为id对应的数据的is_show值为0,在staff_list设置is_show的为1的才显示 就成了
五、总结
添加删除修改 这三个操作相同的都是通过前端相应的数据传输到后段 然后后段判断 进行相应的操做,不同的是添加和修改都需要页面展示。
我需要注意的还是对js的操作,主要对ajax的操作,对超链接的定向location 还有便捷的找到相应的元素不熟悉
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号