У меня есть школьный проект, и я делаю систему входа в систему, где вы можете войти с электронной почтой или именем пользователя. Но у меня проблема с отображением правильного эха, что адрес электронной почты или имя пользователя неверно.
Вот мой код:
if(strpos($emailOrUsername, "@")){
$query = $dbh->prepare('SELECT * FROM register WHERE email = ?');
$query->execute(array($emailOrUsername));
}
if($query->rowCount() == 0){
echo('Email is incorrect');
}if($emailOrUsername){
$query2 = $dbh->prepare('SELECT * FROM register WHERE username = ?');
$query2->execute(array($emailOrUsername));
}
if($query2->rowCount() == 0){
echo('Gebruikersnaam bestaat niet');
}
Теперь я хочу показать только одно эхо. Потому что, если вы введете неправильный адрес электронной почты и имя пользователя, он покажет оба эха, и я хочу, чтобы он показывал только один.
Вам не нужно.
Запросите оба запроса в одном запросе, и если не будет возвращено ни одной строки, вы отвечаете: «Нет такого пользователя», в противном случае вы помогаете хакеру еще на шаг приблизиться к определению правильности имен пользователей или адресов электронной почты.
Дополнение:
Не сообщайте, если имя пользователя / адрес электронной почты или пароль были неправильными. Просто дайте общее сообщение об ошибке.
Я думаю, что вы должны изменить
if(strpos($emailOrUsername, "@"))
в
if(strpos($emailOrUsername, "@") !==false)
а также
if($emailOrUsername)
в
elseif($emailOrUsername)
или же elseif(!empty($emailOrUsername))
Несмотря на то, что есть много возможностей для импровизации вашего запроса, тем не менее, я доработал его, чтобы соответствовать вашим потребностям на данный момент.
if(strpos($emailOrUsername, "@")){
$query = $dbh->prepare('SELECT * FROM register WHERE email = ?');
$query->execute(array($emailOrUsername));
if($query->rowCount() == 0){
echo('Email is incorrect');
}
}
else {
$query2 = $dbh->prepare('SELECT * FROM register WHERE username = ?');
$query2->execute(array($emailOrUsername));
if($query2->rowCount() == 0){
echo('Gebruikersnaam bestaat niet');
}
}
Вам не нужно иметь несколько if
условия, когда вы можете достичь этого в одном if
else
блок.