Проверьте, не активирован ли activation_code при входе в систему. «ТОЛЬКО» activation_code

#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.