今天,学习了用PDO预处理技术对数据新增 更新 删除,学习了可靠的得到查询数据数量的方法,还有学习了员工管理系统中的用户的查询 更新 保存的功能。
一、PDO预处理数据的新增更新删除
这部分同昨天的查询大同小异,也是通过数据绑定来实现。
二、可靠的查询数据数量的方法
通过count函数得到符合条件的数据的数量,形成一个列,然后通过判断列是否有值,然后再进行查询。例如:
<?php
//正确获取影响数
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
//用count函数获取影响行数的列
$sql = 'SELECT count(*) FROM `admin` WHERE `age`>:age';
$stmt = $pdo->prepare($sql);
$stmt->execute(['age'=>40]);
if ($stmt->fetchColumn(0)) {
$sql = 'SELECT * FROM `admin` WHERE `age`>:age';
$stmt = $pdo->prepare($sql);
$stmt->execute(['age'=>40]);
foreach ($stmt->fetchAll() as $item) {
echo '<pre>', print_r($item, true);
}
}点击 "运行实例" 按钮查看在线实例
三、案例:员工管理系统中的用户查询,更新,保存。
功能实现的流程为:user_list(查询所有用户)-》user_edit(更新用户的用户名与密码,ajax与user_manage交互)->user_manage(对提交过来的数据进行判定,然后对数据进行更新,然后再把处理后的结果数据返回给user_edit)
<?php
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
//sql语句
$sql = 'SELECT * FROM `user` LIMIT 1';
//准备对象
$stmt = $pdo->prepare($sql);
//执行
$stmt->execute();
// 员工信息
$user = $stmt->fetch(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户设置</title>
<style>
table,th,td {
border: 1px solid #666;
padding: 8px;
}
table {
border-collapse: collapse;
width: 80%;
text-align: center;
margin: 30px auto;
}
thead tr:first-of-type {
background-color: lightblue;
}
table > caption {
font-size: 1.2rem;
margin-bottom: 15px;
}
button:hover {
cursor: pointer;
background-color: lightblue;
}
</style>
</head>
<body>
<table>
<caption>用户设置</caption>
<thead>
<tr>
<th>id</th>
<th>用户名</th>
<th>邮箱</th>
<th>操作</th>
</tr>
<tr>
<td><?= $user['id']?></td>
<td><?= $user['name']?></td>
<td><?= $user['email']?></td>
<td>
<button onclick="location.href='user_edit.php?id=<?= $user['id']?>'">编辑</button>
</td>
</tr>
</thead>
</table>
</body>
</html>点击 "运行实例" 按钮查看在线实例
<?php
//echo $_GET['id'];
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
//sql语句
$id = intval(trim($_GET['id']));
$sql = "SELECT * FROM `user` WHERE `id`={$id} ";
//准备对象
$stmt = $pdo->prepare($sql);
//执行查询
$stmt->execute();
//获取查询结果数组
$user = $stmt->fetch(PDO::FETCH_ASSOC);
?>
<!doctype html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>用户编辑</title>
<style>
h3 {
text-align: center;
}
div {
width: 300px;
height: 180px;
/*background-color: lightblue;*/
margin: 0 auto;
text-align: center;
padding: 20px;
border: 1px dashed #888;
border-radius: 5%;
}
div input {
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>用户名:
<input type="text" name="name" value="<?=$user['name']?>" disabled>
</label>
</p>
<p>
<label>邮 箱:
<input type="email" id="email" name="email" value="<?=$user['email']?>" autofocus>
</label>
</p>
<p>
<label>密 码:
<input type="password" id="password" name="password" value="<?=$user['password']?>">
</label>
</p>
<!-- 将当前用户的id,做为更新条件,以隐藏域的方式发送到服务器端-->
<input type="hidden" id="id" value="<?=$user['id']?>">
<p>
<button type="button" onclick="save(this.form)">保存</button>
<button type="button" onclick="history.back()">取消</button>
</p>
<!-- 提示信息占位符-->
<p></p>
</form>
</div>
<!-- ajax提交修改数据-->
<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.innerHTML = data.message;
if (data.status === 1) {
tips.classList.add('success');
} else {
tips.classList.add('error');
}
// 2秒钟跳转到上个页面
setTimeout(function () {
history.back();
}, 2000);
}
};
// 设置请求参数
request.open('POST', 'user_manage.php?action=save');
// 设置请求头信息
request.setRequestHeader('content-type', 'application/x-www-form-urlencoded');
// 发送请求
request.send('email='+form.email.value+'&password='+form.password.value+'&id='+form.id.value);
}
</script>
</body>
</html>点击 "运行实例" 按钮查看在线实例
<?php
//连接数据库
$pdo = new PDO('mysql:host=127.0.0.1;dbname=php', 'root', 'root');
//获取action方法
$action = strtolower(trim($_GET['action']));
//对action方法分别进行操作
switch ($action) {
case 'save':
$sql = "UPDATE `user` SET `email`=:email, `password`=:password WHERE `id`=:id";
$stmt = $pdo->prepare($sql);
$email = strtolower(trim($_POST['email']));
$password = strtolower(trim($_POST['password']));
$id = strtolower(trim($_POST['id']));
$stmt->bindParam('email', $email, PDO::PARAM_STR, 60);
$stmt->bindParam('password', $password, PDO::PARAM_STR, 20);
$stmt->bindParam('id', $id, PDO::PARAM_INT);
if ($stmt->execute()) {
if ($stmt->rowCount() === 1) {
$status = 1;
$message = '保存成功';
} elseif ($stmt->rowCount() === 0) {
$status = 0;
$message = '信息没有更新';
}
} else {
$status = -1;
$message = '保存失败';
}
echo json_encode(['status'=>$status, 'message'=>$message]);
}点击 "运行实例" 按钮查看在线实例
四、总结
今天重点再案例上,难度不大但是涉及到3个页面,以及ajax的交互。这三个页面中数据的交互为:user_list是将用户中的所有数据查询然后显示,通过点击编辑按钮将id值通过get方式传递到user_edit,user_edit通过传过来的id值就可以将相应的id email password进行展示,然后通过点击保存按钮触发其绑定的save方法,save方法主要是通过ajax将数据异步到user_manage,传输的数据有post方式的表单中的email password 和隐藏的id 还有get方式的action值为save,数据到了user_manage后开始处理,如果action的值为save 那么就进行更新操作,更加rowcount的值来判断他是否进行修改 ,再按照实际情况将分别赋值status message,通过json格式返回给user_edit,user_edit根据相应的值进行相应的显示。
还学习了json格式,他是html认识的数据格式,php中通过json_encode返回一个json格式 js中通过json.parse()来解析成为对象或者数组;
php中trim函数用来去掉空格 strtolower用来转换为小写 intval转换成整数
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号