Php 已注册的电子邮件不允许更新用户数据
当我登录到系统时,我使用以下变量调用电子邮件地址Php 已注册的电子邮件不允许更新用户数据,php,mysqli,Php,Mysqli,当我登录到系统时,我使用以下变量调用电子邮件地址$email 需要注意的是,此电子邮件已经过验证,它是系统中唯一的电子邮件,没有重复 现在在帐户的配置中,用户可以更新他的数据,包括他的电子邮件地址 问题是: 如果用户更改其姓名、地址、电话但减少了邮件,系统将向我发送以下个性化消息: 拥有此电子邮件的用户已存在 这是你的同一封电子邮件不应该向我抛出那个错误,应该允许你更新你的数据,但它没有 我做了以下几件事 $stmtEmail = $con->prepare("SELECT * FROM
$email
需要注意的是,此电子邮件已经过验证,它是系统中唯一的电子邮件,没有重复
现在在帐户的配置中,用户可以更新他的数据,包括他的电子邮件地址
问题是:
如果用户更改其姓名、地址、电话但减少了邮件,系统将向我发送以下个性化消息:
拥有此电子邮件的用户已存在强>
这是你的同一封电子邮件不应该向我抛出那个错误,应该允许你更新你的数据,但它没有
我做了以下几件事
$stmtEmail = $con->prepare("SELECT * FROM users WHERE email=? AND id_user NOT IN (?)");
$stmtEmail->bind_param("ss",$email,$email);
但是它在$stmtEmail->bind_参数(“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;
}
}
我认为您需要检查数据库中的所有电子邮件,其中用户id不等于提供的此电子邮件id。如果此用户id的新电子邮件id在数据库中不存在,而不是此用户id,然后,然后只更新电子邮件…还向该用户发送另一个带有新电子邮件id的电子邮件验证链接,以验证并使其从当前会话注销
e、 g
因为
if ($stmtEmail->num_rows>0) {
这一行不能解决您的问题。。。。您需要检查num\u rows>0
whereuser\u id!=这个用户id
…我假设您手头有所有的用户数据
检查电子邮件时,请修改您的查询
$stmtEmail = $con->prepare("SELECT * FROM users WHERE email=? AND id != ?");
$stmtEmail->bind_param("sd",$email, $id);
要使用用户ID,我不知道你叫它什么。这样,在搜索帐户时,将从结果中排除当前用户行
您对此查询的尝试(在更新的问题中)
$stmtEmail=$con->prepare(“从电子邮件=?且id_用户不在(?)中的用户中选择*)
$stmtEmail->bind_参数(“ss”、$email、$email)
肯定会失败,因为您有$email,$email
isntead的$email,$id
另外,使用NOT IN()
时,通常必须单独指定数组元素。您需要而不是不在(?)
中(?,?)
。至少就我所知,我不使用Mysqli。检查数组也没有意义,因为只有一个用户登录,因此应该只排除他们。So。。有什么问题?不知道你想要什么。请更清楚地描述情况。@CodeThing它不允许我更新您在同一封邮件中留下的数据以及您如何识别用户。正在更新的用户已登录?@code显然,只有用户已登录,才能编辑数据,因此我指出此变量$email具有当前的注册邮件。我不理解您回答的过程:(再次编辑我的问题,问题不在它指出的地方,不要添加其余的,因为这不是问题。如果你没有添加所有的代码,你应该通过注释或在此处放置类似于/…其他代码的内容来表明这一点,或者因为当你说,在编辑之前,如果用户输入名称…,则类似于en它不更新
等等。我已经添加了它,但问题出现在第一个查询区域,因为您没有使用当前用户ID,然后当您使用时,您使用电子邮件,并假设这是一个数组,因为据我所知,您在
中使用了,因此无法将数组绑定到单个占位符。如果它不是数组,您将uld不能在
中使用,而是使用=
。宠物皮,命名约定。只是说。
$stmtEmail = $con->prepare("SELECT * FROM users WHERE email=? AND id != ?");
$stmtEmail->bind_param("sd",$email, $id);