Как сделать регистрацию на PHP (MVC)?

159
31 декабря 2021, 21:10

Пытаюсь сделать авторизацию на чистом PHP с паттерном MVC. Почему-то модель возвращает bool(false), вместо массива с данными пользователя при входе в личный кабинет. Используется PDO-подключение. С подключением всё впорядке, SQL-запрос проверил, в PhpMyAdmin он отрабатывает. Регистрация работает отлично, а вот авторизация никак. В базе данных уже есть данные, поэтому пустой массив отдавать не должен.

Controller

class Account extends Controller {
    function __construct() {
        parent::__construct(); // подключение к View
    }
    public function index() {
        if ($_SESSION['user']) { // аутентификация
            $arg = ['Аккаунт', 'Аккаунт - это титл'];
            $this->view->render('account/account', $arg);
        } else { // аутентификация не пройдена
            $arg = ['Авторизация', 'Авторизация - это титл'];
            $this->view->render('auth/login', $arg); // отдаём страницу авторизации
        }
    }
    public function login() { // функция авторизации
        $email = $_POST['email']; // принимаем POST
        $pass = $_POST['password']; // принимаем POST
        $user = $this->model->getUser($email, $pass);
        var_dump($_POST)."</br>"; // здесь выводит массив, всё норм
        var_dump($user); // здесь возвращает bool(false), а должен массив с данными пользователя из базы
        if (!empty($user)) { // если данные пользователя есть
            $_SESSION['user'] = [ // создаём Юзера
                'username' => $user['name'],
                'id' => $user['id'],
                'email' => $user['email'],
            ];
            $arg = ['Личный кабинет', 'Аккаунт - это титл']; // аргументы в функцию
            $this->view->render('account/account', $arg); // отдаём страницу авторизации
        } else { // если данных пользователя нет
            $_SESSION['message'] = 'Email или пароль не верные!';
            $arg = ['Авторизация', 'Авторизация - это титл'];
            $this->view->render('auth/login', $arg); // отдаём страницу авторизации
        }
    }
    public function logout() { // функция дезавторизации
        $_SESSION['user'] = [];
        header('Location: '.URL.'main');
    }

Model

<?php
class Account_model extends Model {
    function __construct() {
        parent::__construct(); // подключаем БД через родительский конструктор
    }
    public function getUser($email, $pass) {
        $sql = "SELECT * FROM `users` WHERE `email` = '$email' AND `password` = '$pass'";
        $query = $this->db->query($sql); // отправляем запрос через PDO
        if (!empty($query)) { // если запрос вернул данные
            return $query->fetch(); // получаем эти данные и возвращаем их в Controller
        } else { // если запрос не вернул данные
            return 'Ошибка в Модели (База данных)';
        }
    }
}

View (В который зайти не получается при верно введённых данных)

<?php
session_start();
?>
<main>
    <div class="main-content">
        <h1>Добро пожаловать, <?=$_SESSION['user']['username'];?></h1>
        <p>Вы успешно авторизовались!</p>
        <a href="<?=URL.'account/logout';?>">Выйти</a>
    </div>
READ ALSO
Альтернатива action url &amp; post - form

Альтернатива action url & post - form

Подскажите, можно ли, например, при помощи curl'а выполнить запрос в стиле формы с последующей переадресацией ? Ну те если есть форма, то там...

82
Получить последние значения в строке

Получить последние значения в строке

Есть строка 167_319_838_852 строка динамическая может быть такой 167_319_8388 и такой 167_3195

184
PDO передача некорректного параметра в подготовленный запрос

PDO передача некорректного параметра в подготовленный запрос

Передаю ошибочный маркер в параметры подготовленного запроса, но в итоге не выбрасывается никакое исключение, возвращает как успешный результат,...

74
Как в письме удалить один атрибут? Woocommerce

Как в письме удалить один атрибут? Woocommerce

Необходимо из шаблона письма удалить один атрибут товара из двух, те

180