Задать вопрос
mr_qpdb
@mr_qpdb
⏱ - is not eternal

Как проверить существует ли такой пользователь в базе данных, чтобы можно было валидировать регистрацию пользователей на сайте?

Доброго времени суток!
У меня есть сайт, где есть регистрация пользователей. Как проверить существует ли такой пользователь в базе данных, и если есть, то вывести ошибку "такой пользователь уже зарегистрирован".
Иначе люди могут регать аккаунты под одним и тем же логином. Помогите, пожалуйста.

Вот сам запрос:
require_once '../mysql_connect.php';
  
$sql = 'INSERT INTO users(name, email, login, pass) VALUES(?, ?, ?, ?)';
$query = $pdo->prepare($sql);
$query->execute([$username, $email, $login, $pass]);


В этот запрос надо добавить проверки, чтобы можно было сверять с бд на наличие такого же логина. И если нету наличия - то регистрировать, ибо - нет
  • Вопрос задан
  • 7032 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 3
Один из возможных вариантов - просто получить count пользователей с таким логином.

$sql = 'SELECT count(id) as count FROM users WHERE login=?'; //записываем sql в котором считаем количество найденных id
$query = $pdo->prepare($sql); 
$query->execute([$login]);
$count_users = $query->fetch(); //получаем одну строчку
if ((int)$count_users['count'] === 0) { //Если таких пользователей больше 0
    //здесь код регистрации
} else {
   exit('Логин уже занят'); //делаем выход из скрипта. Сюда можно написать что угодно
}
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Честно, вот я не понимаю, как такой вопрос в принципе может возникнуть.
Ведь это базовый запрос SELECT и ничего больше. Ведь нельзя же писать авторизацию, не зная, как выбрать пользователя по логину? Веь потом этот же самый запрос понадобится при авторизации.
$sql = 'SELECT * FROM users WHERE login=?';
$query = $pdo->prepare($sql);
$query->execute([$login]);
$user= $query->fetch();
if ($user) { 
    // вывести ошибку "такой пользователь уже зарегистрирован".
} else {
    // твой код на вставку
}


Нет, ну можно конечно поставить на поле логин уникальный индекс и ловить исключение прямо в запросе на вставку, но учитывая, что ты в простейшем селекте путаешься, то думаю лучше оставить такой способ на потом
Ответ написан
Ещё один запрос перед вставкой:

$stmt = $pdo->prepare('SELECT COUNT(id) FROM users WHERE email=:email OR login=:login');
$stmt->execute([
  'email' => $email,
  'login' => $login,
]);
if ($stmt->fetch() > 0) {
  // Такой пользователь уже существует.
}


Вопрос: зачем вам юзернейм и логин.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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