Зарегистрированный адрес электронной почты не позволяет обновлять данные пользователя - PullRequest
0 голосов
/ 08 сентября 2018

При входе в систему я вызываю адрес электронной почты, используя следующую переменную $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;
    }
}

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Я предполагаю, что у вас есть все данные пользователя под рукой,

При проверке электронной почты измените ваш запрос

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

Чтобы использовать идентификатор пользователя, я понятия не имею, как вы его называете,Таким образом, при поиске учетной записи вы исключаете строку текущих пользователей из результатов.

Ваша попытка выполнить этот запрос (в обновленном вопросе)

$ stmtEmail = $ con> prepare ("ВЫБЕРИТЕ * У пользователей, ГДЕ электронная почта =? И id_user НЕ ВХОДИТ (?)");

$ stmtEmail-> bind_param ("ss", $ email, $ email);

Обязательно завершится неудачей, потому что у вас $email,$email вместо $email,$id

Также при использовании NOT IN() вам обычно приходится присваивать элементы массива отдельно.Вместо NOT IN(?) вам нужно IN(?,?,?).По крайней мере, насколько я знаю, я не использую Mysqli.Также нет смысла проверять массив, так как у вас есть один зарегистрированный пользователь, и поэтому он должен исключать только их.

0 голосов
/ 08 сентября 2018

Я думаю, вам нужно проверить все электронные письма в базе данных, где user_id НЕ равен этому идентификатору электронной почты предоставлено ... И если новый идентификатор электронной почты для этого user_id не существует в базе данных для других, чем этот user_id, тогда и только обновляйте электронную почту ... также отправьте другую ссылку для проверки электронной почты с новым идентификатором электронной почты этому пользователю, чтобы проверить и заставить его выйти из текущего сеанса ....

, например

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) { 

эта единственная строка не решит вашу проблему .... Вам нужно проверить num_rows > 0, где user_id != this_user_id ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...