当我登录系统时,我使用以下变量$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;
}
}
我假设你手头有所有用户数据,
检查电子邮件时,请修改您的查询
$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。检查数组也没有意义,因为您有一个用户登录,因此只应排除它们。
我认为您需要检查数据库中的所有电子邮件,其中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) {
....