Как извлечь текущий user_id пользователя, вошедшего в эту сессию? - PullRequest
1 голос
/ 01 мая 2020

Логин. php
Я пытался извлечь идентификатор сеанса пользователя, который вошел в систему, и вызвать его на другой странице, чтобы сохранить user_id в комментариях. Таблица. Однако, когда я попытался это сделать, на следующей странице он выводит только 0, а не идентификатор пользователя.

<?php
session_start();
require "../layouts/header.php";//including header
require '../database/db.php';//db connection

    if (isset($_POST['login'])) {
        if(empty($_POST["username"]) || empty($_POST["password"]))
        {
            $msg = '<label style="color:red;"> Missing fields!</label>';
        }
        else
        {
            //checking if the provided credential match with the database
            $query = "SELECT * FROM users where username=:username";
            $statement = $db->prepare($query);
            //criteria for successful login
            $condition = [
                'username'=>$_POST['username']

            ];
            $statement->execute($condition);

            $count = $statement->rowCount();
            if($count > 0)
            {                   
                $users=$statement->fetch(PDO::FETCH_OBJ);
                $pwd = $_POST['password'];
                    //verification of password
                    if (password_verify($pwd, $users->password))
                    {
                        $type = $_POST['type'];
                        $_SESSION['username'] = $_POST['username'];
                        foreach( $users as $view):
                        $_SESSION['user_id'] = $view['user_id'];

                        if($type==$view['type'] && $type == 1)
                        {
                            header("location:../admin/index.php"); 
                        }
                        if($type==$view['type'] && $type == 0)
                        {
                            header("location:../client-side/index.php?user_id=<?= $view->user_id; ?>");
                        }
                        else
                        {
                            echo "Invalid!";
                        }    
                        endforeach; 
                    }
                    else{
                        echo '<label style="color:red;"> Invaid Entry!</label>';
                    }
            }
            else
            {
                $msg = '<label style="color:red;"> Invaid Entry!</label>';
            }
        }
    }

?> Форма входа

<main class="home" style="margin-bottom: 30px; margin-top:30px;">
    <h2 style="text-align: center">Login</h2>
    <hr>

    <form action="login.php" method="POST">

        <label>Username:</label>
        <input type="text" name="username" placeholder="Enter Username"><br>
        <label>Password:</label>
        <input type="password" name="password" placeholder="Enter Password"><br>
        <label><strong>Please select one:</strong></label> 
        <label>Admin</label>
        <input type="radio" name="type" id="Admin" value="1" style="margin-top: 33px; height:20px;width:20px;"><br>
        <label>Client</label>
        <input type="radio" name="type" id="Client" value="0" style="margin-top: 33px; height:20px;width:20px;"><br>
        <input type="submit" name="login" value="Login">
    </form>

    <div style="height: 200px;"></div>

    <br>
</main>

    <?php            
    require "../layouts/footer.php"; 
    ?>

index. php на странице индекса выводится только 0, а не user_id

<?php
    if(isset($_SESSION["user_id"]))
    {
        echo '<h1> Welcome - '.$_SESSION["user_id"].'</h1>';

    }
?>

1 Ответ

0 голосов
/ 01 мая 2020

Я проверил ваш код на моей собственной машине, и кажется, что ваша проблема в том, что у вас есть oop. Я не думаю, что вам нужно запускать foreach, так как вы уже получили один объект с PDO :: FETCH_OBJ.

Также вы пытаетесь получить доступ к свойству user_id из вашего класса $ view в виде массива.

Я думаю, что простой модификации вашего кода должно быть достаточно. Обратите внимание, что вы получите имя пользователя, потому что вы назначаете его сеансу непосредственно из переменной $ _POST, перед foreach l oop.

<?php
session_start();
require "../layouts/header.php";//including header
require '../database/db.php';//db connection

    if (isset($_POST['login'])) {
        if(empty($_POST["username"]) || empty($_POST["password"]))
        {
            $msg = '<label style="color:red;"> Missing fields!</label>';
        }
        else
        {
            //checking if the provided credential match with the database
            $query = "SELECT * FROM users where username=:username";
            $statement = $db->prepare($query);
            //criteria for successful login
            $condition = [
                'username'=>$_POST['username']

            ];
            $statement->execute($condition);

            $count = $statement->rowCount();
            if($count > 0)
            {                   
                $users=$statement->fetch(PDO::FETCH_OBJ);
                $pwd = $_POST['password'];
                    //verification of password
                    if (password_verify($pwd, $users->password))
                    {
                        $type = $_POST['type'];
                        $_SESSION['username'] = $_POST['username'];

                        $_SESSION['user_id'] = $user->user_id;

                        if($type==$user->type && $type == 1)
                        {
                            header("location:../admin/index.php"); 
                        }
                        if($type==$user->type && $type == 0)
                        {
                            header("location:../client-side/index.php?user_id=<?= $user->user_id; ?>");
                        }
                        else
                        {
                            echo "Invalid!";
                        }    
                    }
                    else{
                        echo '<label style="color:red;"> Invaid Entry!</label>';
                    }
            }
            else
            {
                $msg = '<label style="color:red;"> Invaid Entry!</label>';
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...