@kvxz2114

Почему не воводятся данные из БД?

В качестве практики изучения PHP решил написать самую простую регистрацию-авторизацию на чистом PHP, но возникли проблемы с выводом данных из БД после авторизации (не выводится имя авторизовавшегося пользователя)
Код авторизации:
<?php
    session_start();
    require_once 'db_connect.php';

    $password = md5($_POST['password']);
    $username = $_POST['username'];

    $sql = "SELECT * FROM users WHERE username = :username AND password = :password";

    if (empty($password) || empty($username)) {
        $_SESSION['message'] = 'Please, fill all the lines';
        header('Location: /index.php');
    }
    $stmt = $pdo->prepare($sql);
    $stmt->execute(array(
        'username' => $username,
        'password' => $password
    ));

    $row_count = $stmt->fetchColumn();

    if ($row_count > 0 ){

        $user_data = $stmt->fetchAll();

        $_SESSION['user'] = [
            "id" => $user_data['id'],
            "username" => $user_data['username'],
            "email" => $user_data['email']
        ];

        header('Location: authorized_page.php');

    } else {

        $_SESSION['message'] = 'Incorrect password or login';
        header('Location: /index.php');


Код страницы, где должно выводится имя пользователя:
<?php session_start(); ?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <p>Hello, <?= $_SESSION['user']['username']; ?></p>
    <p><a href="log_out.php">Log out</a></p>
</body>
</html>


В чем может быть проблема?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
Fockker
@Fockker Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Потому что никто никогда не читает документацию.
В которой написано, например - какой массив возвращает fetchAll(). И можно ли из него получить что-то в виде $user_data['id'].
А ещё в мануале написано, какая на самом деле функция подойдёт в данном случае.

Также, там написано, что делает функция fetchColumn(). Которая, во-первых, делает совсем не то что думает автор кода, а во-вторых, даже если бы и делала, то всё равно здесь никаким боком не нужна.

И я уже не говорю, что в мануале написано темно-красным по светло-красному, что MD5 нельзя использовать для хэширования паролей.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
После fetchColumn курсор переходит на следующую строку результирующего набора и fetchAll ничего не получает.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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