更新当前用户信息的问题PHP PDO

时间:2016-02-28 11:20:28

标签: php mysql database pdo

我目前正在使用用户个人资料系统...我被困在用户更新其信息的阶段。我正在检查用户新选择的电子邮件地址是否已存在于数据库中。目前,我将其当前的电子邮件地址回显为表单中的输入值。

收到的验证错误是阻止用户更新其他信息,如果他们的电子邮件保持与数据库中已有的相同....任何指导都将不胜感激。谢谢

$signedin = $_SESSION['username'];

function userExists($db, $email)
{
    $userQuery = "SELECT * FROM members WHERE email = '$email' and email != '$signedin'";
    $stmt = $db->prepare($userQuery);
    $stmt->execute(array(':email' => $email));
    return !!$stmt->fetch(PDO::FETCH_ASSOC);
}



$email = $_POST['email'];
$exists = userExists($db, $email);
if($exists)
{
    header("Location: memberAccount.php?action=email_In_Use");
}
else
{
    //submit form data

2 个答案:

答案 0 :(得分:1)

我从哪里开始?

  1. 您将变量直接放入查询
  2. 您不使用标记
  3. 虽然为2,但您尝试将值绑定到标记
  4. 看起来你不明白PDO是什么。

    正确的代码就是:

    $userQuery = "SELECT * FROM members WHERE email = :email and email != :signedin";
    $stmt = $db->prepare($userQuery);
    $stmt->execute(array(':email' => $email, ':signedin' => $signedin));
    

    这也让我想不到你回来时使用!!的原因:

    return !!$stmt->fetch(PDO::FETCH_ASSOC);
    

    应该只是

    return $stmt->fetch(PDO::FETCH_ASSOC);
    

    我也建议阅读How Prepared Statements Work

答案 1 :(得分:1)

好的,所以你的userExists()函数中的逻辑有点正确,但是你已经在函数范围之外声明了$ signedin变量,它无法访问它。此外,PDO参数设置不正确,

像这样修改你的代码,

$signedin = $_SESSION['username'];

function userExists($db, $email)
{
    global $signedin;
    $userQuery = "SELECT * FROM members WHERE email = :email and email != :signed_in";
    $stmt = $db->prepare($userQuery);
    $stmt->execute(array(':email' => $email, ':signed_in' => $signedin));
    return $stmt->fetch(PDO::FETCH_ASSOC);
}

在此处详细了解变量范围:http://php.net/manual/en/language.variables.scope.php

希望这会对你有所帮助。