首页 > 解决方案 > 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());
}

标签: phpclasspdo

解决方案


您在此处执行时以错误的顺序传递参数:

  $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])) {

推荐阅读