@ingeniero

Как наладить корректную работу скрипта регистрации?

Привет! Подскажите, как заставить корректно работать регистрацию? Не работает проверка на наличие в базе логина и эл.почты (регистрирует всех подряд).
Ссылка на код: https://pastebin.com/E93DUaBp
  • Вопрос задан
  • 117 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Твоя проблема заключается в варварском способе, которым ты работаешь с запросами.
Великий писатель Марк Твен еще в позапрошлом веке писал про дурака, который не нашел лучшего применения королевской печати, кроме как орехи колоть. Не надо уподобляться этому дураку.
PDO надо использовать по-человечески, а не орехи им колоть. Все запросы надо выполнять через подготовленные выражения.

Вот как на самом деле должен выглядеть твой код:

if (empty($errors)) {
 
    $stmt = $db->prepare("SELECT count(*) FROM users WHERE email = ? OR login = ?");
    $stmt->execute([$email, $login]);
    $count = $stmt->fetchColumn();
 
    // Если найдены, значит логин/эмайл заняты, не регистрируенм, а выводим ошибку
    if ($count > 0) {
           exit("email или login занят!");    
    } else {
           $sql = "INSERT INTO users (login, email, password) VALUES (?,?,?)";
           $db->prepare($sql)->execute([$login, $email, $password]);
 
           echo '<div class="okreged">Вы успешно зарегистрированы! <a href = "/test/index.php">Перейти на главную</a></div>';
    }
 }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Kirill-Gorelov
С ума с IT
Я переписал кусок проверки пользователя так
$query="SELECT id FROM users WHERE email = ' . $email. ' AND = ' . $login . '";
      $query_res = $db->query($query);
       // Если найдены, значит логин/эмайл заняты, не регистрируенм, а выводим ошибку
         if (!isset($query_res['id'])) {регистрируем}


И посмотри, что выводит
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы