#php #mysql #select
#php #mysql #выберите
Вопрос:
Это код, который я использую при входе в систему:
$q = $lacz->query("SELECT email, pass, activation_code
FROM users
WHERE email='". $nazwa_uz_l ."'
AND pass = '". $haslo_l ."'
AND activation_code IS NULL ");
if($q->num_rows>0) {
$_SESSION['prawid_uzyt'] = $nazwa_uz_l; }
else
{
echo 'Pass or Log are wrong, or activation code is not confirmed (check email).';
exit;
}
В этом запросе я проверяю все 3 вещи: адрес электронной почты, пароль и код активации, а затем выдаю ошибку. Что я хочу сделать, так это вывести первую ошибку, когда Pass или Log неверны, и вторую ошибку (что-то вроде elseif), когда код активации не равен НУЛЮ. Я попробовал еще if и два запроса, но я получал ошибки. Вы можете мне помочь? Я проверяю ответы и даю баллы, спасибо.
Комментарии:
1. Получите строку с соответствующим адресом электронной почты и проверьте остальные в php.
Ответ №1:
Удалите «И activation_code РАВНО НУЛЮ» из вашего запроса и сделайте что-то вроде
if($q->num_rows>0)
{
$row = $q->fetch_assoc();
if(!is_null($row['activation_code']))
{
$_SESSION['prawid_uzyt'] = $nazwa_uz_l;
}
else
{
echo 'Activation code is not confirmed (check email).';
exit;
}
}
else
{
echo 'Pass or Log are wrong.';
exit;
}
Ответ №2:
Не проверяйте код активации в запросе. Просто получите информацию о пользователе вместе с полем кода активации:
SELECT email, pass, activation_code
..
WHERE email='foo' and pass='bar'
Затем вы можете протестировать отдельные условия в своем коде:
if (number_of_rows == 0) {
... bad username/password
} else if ($activation_code == '') {
... code is blank/null
}
Ответ №3:
Если вы удалите AND activation_code IS NULL
из WHERE
предложения запроса, вы сможете извлекать данные для пользователя, соответствующего заданному адресу электронной почты / паролю. Затем, с помощью этого, вы сможете определить, существует ли пользователь или его код активации пуст:
$q = $lacz->query("SELECT email, pass, activation_code
FROM users
WHERE email='". $nazwa_uz_l ."'
AND pass = '". $haslo_l ."'");
if ($q->num_rows === 0) {
echo 'Password or email address are wrong.';
exit;
} else {
$row = $result->fetch_assoc();
if (empty($row['activation_code'])) {
echo 'Activation code is not confirmed.';
exit;
} else {
$_SESSION['prawid_uzyt'] = $nazwa_uz_l;
}
}
Примечание (не связано с ответом): Я настоятельно рекомендую использовать параметризованный запрос вместо прямой вставки значений в SQL; если вы предпочитаете текущий способ, убедитесь, что вы сначала очистили ввод, чтобы предотвратить внедрение SQL.