我目前正在使用用户个人资料系统...我被困在用户更新其信息的阶段。我正在检查用户新选择的电子邮件地址是否已存在于数据库中。目前,我将其当前的电子邮件地址回显为表单中的输入值。
收到的验证错误是阻止用户更新其他信息,如果他们的电子邮件保持与数据库中已有的相同....任何指导都将不胜感激。谢谢
$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
答案 0 :(得分:1)
我从哪里开始?
看起来你不明白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);
答案 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
希望这会对你有所帮助。