已注册的电子邮件不允许更新用户数据

问题描述 投票:0回答:2

当我登录系统时,我使用以下变量$email调用电子邮件地址

应该注意的是,这封电子邮件已经过验证,它是系统中唯一的电子邮件,没有重复。

现在,在帐户的配置中,用户可以更新他的数据,包括他的电子邮件地址。

问题:

如果用户更改了他的姓名,地址,电话但邮件更少,系统会向我发送以下个性化消息:

使用此电子邮件的用户已存在!

这是你的同一个电子邮件不应该抛出我的错误,并应该允许你更新你的数据,但事实并非如此。

我做了以下

$stmtEmail = $con->prepare("SELECT * FROM users WHERE email=? AND id_user NOT IN (?)");
$stmtEmail->bind_param("ss",$email,$email);

但它让我在$stmtEmail->bind_param("ss",$email,$email);错误

我的代码:

$stmtEmail = $con->prepare("SELECT * FROM users WHERE email=?");
$stmtEmail->bind_param("s",$email);
$stmtEmail->execute();
$stmtEmail->store_result();

if ($stmtEmail->num_rows>0) {
    echo json_encode(['status'=> false, 'message'=> ["email" =>"The user with this email already exists!"]]);
    exit;
} else {
    $stmtUpAccounts = $con->prepare("UPDATE users SET first_name=?, last_name=?, phone=?, country=?, city=?, state=?, address=?, zip_code=?, email=? WHERE id_user=?");
    $stmtUpAccounts->bind_param("sssssssssi", $Ufirst_name,$Ulast_name,$Uphone,$Ucountry,$Ucity,$Ustate,$Uaddress,$Uzip_code,$Uemail,$id_user);
    if ($stmtUpAccounts->execute()) {
        echo json_encode(['status'=> true, 'message'=>"Your data was updated correctly"]);
        exit;
    } else {
        echo json_encode(['status'=> false, 'message'=>"We are sorry, but we can not process your request. Try again later."]);
        exit;
    }
}
php mysqli
2个回答
1
投票

我假设你手头有所有用户数据,

检查电子邮件时,请修改您的查询

$stmtEmail = $con->prepare("SELECT * FROM users WHERE email=? AND id != ?");
$stmtEmail->bind_param("sd",$email, $id);

要使用用户ID,我不知道你称之为什么。这样,在搜索帐户时,您会从结果中排除当前用户行。

您尝试此查询(在更新的问题中)

$ stmtEmail = $ con> prepare(“SELECT * FROM users WHERE email =?AND id_user NOT IN(?)”);

$ stmtEmail-> bind_param( “SS”,$电子邮件,$电子邮件);

必然会失败,因为你有qazxsw poi而不是qazxsw poi

此外,当使用$email,$email时,您通常必须单独分配数组元素。而不是$email,$id你需要NOT IN()。至少据我所知,我不使用Mysqli。检查数组也没有意义,因为您有一个用户登录,因此只应排除它们。


0
投票

我认为您需要检查数据库中的所有电子邮件,其中user_id不等于此提供的电子邮件ID。如果此user_id的数据库中不存在此user_id的新电子邮件ID,则然后仅更新电子邮件...还会向此用户发送另一封带有新电子邮件ID的电子邮件验证链接,以验证并让他从当前会话中退出....

EG

NOT IN(?)

因为

IN(?,?,?)

这一行不会解决你的问题....你需要检查if ($stmtEmail->num_rows>0) { //**query should be for email check where user_id != this user_id** echo json_encode(['status'=> false, 'message'=> ["email" =>"The user with this email already exists!"]]); exit; } else { $stmtUpAccounts = $con->prepare("UPDATE users SET first_name=?, last_name=?, phone=?, country=?, city=?, state=?, address=?, zip_code=?, email=? WHERE id_user=?"); //** Add send email code to send new email verification code link to this new email... } 在哪里if ($stmtEmail->num_rows>0) { ....

© www.soinside.com 2019 - 2024. All rights reserved.