@Stacie_Sm

Как сделать проверку на наличие пользователя в базе данных?

Здравствуйте, при регистрации необходимо сделать проверку на пользователя. Если в базе данных уже есть такое же имя, что вводит пользователь для регистрации, то должна выдаваться ошибка.
Для того что бы сделать проверку я ее написала, таким образом, что сначала идет проверка на существует ли такой пользователь в б.д, если нет то регистрируем пользователя. Если такое имя есть то выводит ошибку. Но все равно ошибку не выводит. Подскажите, пожалуйста, где я допустила ошибку.

UserModel.php
<?php
    require 'DB.php';

    class UserModel {
        private $name;
        private $email;
        private $pass;
        

        private $_db = null;

        public function __construct() {
            $this->_db = DB::getInstence();
        }

        public function setData($name, $email, $pass) {
            $this->name = $name;
            $this->email = $email;
            $this->pass = $pass;
            
        }

        public function validForm() {
            if(strlen($this->name) < 3  )
                return "Имя слишком короткое";
            else if(strlen($this->email) < 3)
                return "Email слишком короткий";
            else if(strlen($this->pass) < 3)
                return "Пароль не менее 3 символов";
            else
                return "Верно";
        }

        
        public function addUser() {
            
            $result = $this->_db->query("SELECT COUNT(`id`) AS `count` FROM `users` WHERE `name` = '$name'");
            $user = $result->fetch(PDO::FETCH_ASSOC);
            
            if($user['count'] != 0)
                 return 'Пользователь с таким логином существует';
            else {

            $sql = 'INSERT INTO users(name, email, pass) VALUES(:name, :email, :pass)';
            $query = $this->_db->prepare($sql);

            $pass = password_hash($this->pass, PASSWORD_DEFAULT);
            $query->execute(['name' => $this->name, 'email' => $this->email, 'pass' => $pass]);

            $this->setAuth($this->name);
            }
        }
}


UserController.php
<?php
    class User extends Controller {
        public function reg() {

            $data = [];
            if(isset($_POST['name'])) {
                $user = $this->model('UserModel');
                $user->setData($_POST['name'], $_POST['email'], $_POST['pass']);
                

                $isValid = $user->validForm();
                if($isValid == "Верно")
                    $user->addUser();
                else
                    $data['message'] = $isValid;
            }

            $this->view('user/reg', $data);
        }
}
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ответы на вопрос 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Переменная $user не определена внутри функции addUser(), в момент первого использования конечно. Кстати, это ошибка, PHP должен был об этом настойчиво сообщить.
Ответ написан
Вместо
SELECT COUNT(`id`) AS `count` FROM `users` WHERE `name` = '$name'

оптимальнее
SELECT 1 FROM `users` WHERE `name` = '$name' LiMIT 1
Потому что пользователей считать не надо. Достаточно получить ненулевую выборку.
Ну и, разумеется, добавить индекс по полю `name`.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
от 300 000 до 500 000 ₽
20 апр. 2024, в 18:09
70000 руб./за проект
20 апр. 2024, в 18:04
3000 руб./за проект
20 апр. 2024, в 17:55
3000 руб./за проект