Я пытаюсь проверить свою таблицу базы данных.
Он проверяет, существует ли для указанного имени пользователя адрес электронной почты или пароль. В случае, если любой из них присутствует в базе данных для предоставленного имени пользователя, пользователю показывается сообщение об ошибке, и записи не изменяются.
Проблема: Однако по какой-то причине моя проверка работает только в том случае, если для записи присутствуют и пароль, и адрес электронной почты (он не отображает сообщение об ошибке, если адрес электронной почты пуст, а пароль — нет). Ниже мой код:
require ('core/dbcon.php');
$user = mysqli_real_escape_string($con, $_GET['user']);
$acc_status = mysqli_real_escape_string($con, $_GET['status']);
if(empty($_POST['form']) === false){
$usr_email = mysqli_real_escape_string($con, $_POST['email']);
$pwd = mysqli_real_escape_string($con, $_POST['password']);
$rpwd = mysqli_real_escape_string($con, $_POST['rpwd']);
$qry = mysqli_query($con, "SELECT * FROM users WHERE email='$usr_email'") or die(mysqli_error($con));
$usr_details = mysqli_fetch_assoc($qry);
if(empty($usr_details['email'])=== true && empty($usr_details['password'])=== true){
if(mysqli_num_rows($qry) == 0){
if($pwd && $rpwd && $usr_email){
if($pwd === $rpwd){
$pwd = md5($pwd);
$query = mysqli_query($con, "SELECT * FROM users WHERE username='$user' AND email='$usr_email'") or die(mysqli_error($con));
if (mysqli_num_rows($query)== 1){
//update database table
}else{
$errors[] = 'Error! Your details were not added to the system due to a technical error. Please contact the Admin.';
}
}else{
$errors[] = 'Please make sure that the password entered in both fields are the same.';
}
}else{
$errors[] = 'Please complete all fields marked with a red asterisk';
}
}else{
$errors[] = 'Error! <b>'.$usr_email.'</b> already existis in our system.';
}
}else{
$errors[] = 'Error! It looks like the username you have entered has been assigned an email address and password already.';
}
}
У меня есть запись с именем пользователя «testuser», электронной почтой «[email protected]» и паролем «password». Моя проверка работает нормально, она отображает ошибку "Ошибка! Похоже, введенному вами имени пользователя уже назначены адрес электронной почты и пароль." Однако, когда я удаляю форму адреса электронной почты база данных каким-то образом предполагает, что были выполнены следующие условия: if(empty($usr_details['email'])=== true && empty($usr_details['password'])=== true){
, когда empty($usr_details['password'])===false
.
Я попытался изменить логический оператор с &&
на ||
, но у меня возникла та же проблема (поскольку ИЛИ в первую очередь должен принимать одну пустую и одну непустую переменную). Ваша помощь будет принята с благодарностью.
$usr_email
) для запроса сведений о пользователе ($usr_details
), так как же получить$usr_details
, когда электронная почта была удалена? Кстати, у вас есть серьезные проблемы с безопасностью в вашем коде. - person Lukas Hajdu   schedule 04.07.2015