brutto333
@brutto333

Не работает условие проверки уже зарегистрированных пользователя?

Добрый день, подскажите пожалуйста почему не работает условие проверки уже зарегистрированного пользователя в БД ?
<?php
  require('connect.php');
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }
  if(isset($_POST['username']) && isset($_POST['password'])){
        $username = $_POST['username'];
        $email = $_POST['email'];
        $password = $_POST['password'];


    $sql = 'SELECT count(id) as count FROM users WHERE username=?'; 
    $query = $conn->prepare($sql); 
    $query->execute([$username]);
    $count_users = $query->fetch(); 
    if ((int)$count_users['count'] === 0) { 
      $sql = "INSERT INTO users (`username`, `password`, `email`)
      VALUES ('$username', '$password', '$email')";
    } else {
      echo "<script>alert('Логин уже занят')</script>"; 
    }
        
  if ($conn->query($sql) === TRUE) {
    header("Location: /");
  } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
  }

  $conn->close();
 
    }
?>
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Siverius
//я бы на вашем месте попробовал вот так для начала
        require('connect.php');
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }
        if (isset($_POST['username']) && isset($_POST['password'])) {
            $username = $_POST['username'];
            $email = $_POST['email'];
            $password = $_POST['password'];

            $countUsersQuery = 'SELECT count(id) as count_users FROM users WHERE username=?';
            $query = $conn->prepare($countUsersQuery);
            $query->execute([$username]);
            $countUsersResult = $query->fetch();
            if ((int)$countUsersResult['count_users'] === 0) {
                $insertUserQuery = "
                    INSERT INTO users (`username`, `password`, `email`)
                    VALUES ('$username', '$password', '$email')";
            } else {
                echo "<script>alert('Логин уже занят')</script>";
            }

            if ($conn->query($insertUserQuery) === true) {
                header("Location: /");
            } else {
                echo "Error: " . $insertUserQuery . "<br>" . $conn->error;
            }

            $conn->close();
        }
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Сейчас при дублировании логина, идёт просто переход не срабатывает условие.

Это потому, что вы переиспользуете название переменной и не обрабатываете корректно отрицательное условие.
Если сократить ваш код до описанного сценария, то он выглядит вот так:
$sql = 'SELECT count(id) as count FROM users WHERE username=?'; 
...
echo "<script>alert('Логин уже занят')</script>"; 
...
      
if ($conn->query($sql) === true) {
  header("Location: /");
}


Т.е. во второй проверке вы делаете снова самый первый select, а не insert.
Правда, в этом случае не должна бы проходить проверка на === true. Но, думаю, просто у вас в коде где-то ещё какая-то подобная ерунда написана.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы