php - PHP、PDO、表单、更新用户类未按预期工作
问题描述
我有一个 php 用户类来添加、删除、更新用户。在更新函数上,它没有返回任何错误,它返回成功,但实际的数据库值没有改变。
有任何想法吗?
这是我的 user.class.php 文件。
public function userUpdate($id, $fname, $lname) {
$pdo = $this->pdo;
if (isset($id) && !empty($id) && isset($fname) && !empty($fname) && isset($lname) && !empty($lname)) {
$stmt = $pdo->prepare('UPDATE users SET fname = ?, lname = ? WHERE id = ?');
if ($stmt->execute([$id, $fname, $lname])) {
$this->msg = 'User name was successfully updated!';
return true;
}
else
{
$this->msg = 'User name failed to update!';
return false;
}
}
else
{
$this->msg = 'Data lost or not set!';
return false;
}
}
这是我的 update.func.php 文件。
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (isset($_POST['uid']) && !empty($_POST['uid']) &&
isset($_POST['fname']) && !empty($_POST['fname']) && isset($_POST['lname']) && !empty($_POST['lname'])) {
$id = filter_input(INPUT_POST, 'uid', FILTER_DEFAULT);
$fname = filter_input(INPUT_POST, 'fname', FILTER_SANITIZE_STRING);
$lname = filter_input(INPUT_POST, 'lname', FILTER_SANITIZE_STRING);
if ($user->userUpdate($id, $fname, $lname)) {
header('Location: https://domain/update.php?result=pass&message=' . $user->getMsg());
exit;
}
else
{
header('Location: https://domain/update.php?result=fail&message=' . $user->getMsg());
exit;
}
}
else
{
header('Location: https://domain/update.php?result=fail&message=' . $user->getMsg());
}
}
else
{
header('Location: https://domain/update.php?result=fail&message=' . $user->getMsg());
}
解决方案
您在此处执行时以错误的顺序传递参数:
$stmt = $pdo->prepare('UPDATE users SET fname = ?, lname = ? WHERE id = ?');
if ($stmt->execute([$id, $fname, $lname])) {
您需要将它们传递为:
$stmt = $pdo->prepare('UPDATE users SET fname = ?, lname = ? WHERE id = ?');
if ($stmt->execute([$fname, $lname, $id])) {
推荐阅读
- css - 圆角的超链接不是真正的圆角
- java - JavaFX - 需要一个 for 循环来暂停并等待按钮输入
- ios - 激活物理体时节点未连接到平面
- c++ - 在 C++ 的头文件中使用全局变量“extern”的编译器错误
- r - 在 R 中是否 NA == NA?
- r - (R) 解析字符向量并分成两个单独的列
- amazon-web-services - 无法为 HEAD 操作设置 S3 策略(403 - 禁止)
- c++ - 使用同一词典中的多个标记进行 Aruco 标记跟踪
- javascript - React Native - 如何在页面之间导航 - 错误:未定义不是函数(近,'...(0,_reactNAvigation.StackNavigator)...'))
- c# - 使用最小起订量对并行功能进行单元测试