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
where
user\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);