Không thể lấy phiên php

Ngoài ra, để trả lời câu hỏi của bạn, đây là truy vấn duy nhất như vậy trên trang, nhưng tôi vẫn tiếp tục và thay đổi các biến và nó vẫn báo lỗi cho tôi. Đây là toàn bộ trang

 <?php 
session_start();

	error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

//include config
require_once('includes/config.php');
//include header template
require('includes/header.php');

//check if already logged in move to home page
if( $user->is_logged_in() ){ 
    echo '<div id="errors">You are already logged in. </div>'; 

} 

//process login form if submitted
if(isset($_POST['submit'])){

	$username = $_POST['user_name'];
	$password = $_POST['user_password'];
	
	if($user->login($username,$password)){ 
        $_SESSION['user_name'] = $username; // set session variable of username to that of logged in user

$user_data = array(); 

    $get_user_data = "SELECT 
      user_id
    , user_level
    , user_type
    FROM users 
    WHERE user_name = :user_name";
    $query = $pdo->prepare($get_user_data);
    $query->bindParam(":user_name", $username); 
    $query->execute();     
    while($row = $query->fetch(PDO::FETCH_ASSOC)){
        $user_data[] = $row;
        
        $_SESSION['user_id'] = $row['user_id'];
        $_SESSION['user_level'] = $row['user_level'];
        $_SESSION['user_type'] = $row['user_type'];
    }
        
		//header('Location: chapter.php');
		//exit;
	
	} else {
		$error[] = 'Wrong username or password or your account has not been activated.';
	}

}//end if submit

//define page title
$title = 'Login'; 
?>
<div id = "wrapper">
            <div id = "errors">
            <?php         
            var_dump($row['user_id']);
            var_dump($row['user_level']);
            var_dump($row['user_type']);
            var_dump($_SESSION['user_name']);
            ?></div>

			<form role="form" method="post" action="" autocomplete="off">
				<?php
				//check for any errors
				if(isset($error)){
					foreach($error as $error){
						echo '<p class="bg-danger">'.$error.'</p>';
					}
				}

				if(isset($_GET['action'])){

					//check the action
					switch ($_GET['action']) {
						case 'active':
							echo "<h2 class='bg-success'>Your account is now active you may now log in.</h2>";
							break;
						case 'reset':
							echo "<h2 class='bg-success'>Please check your inbox for a reset link.</h2>";
							break;
						case 'resetAccount':
							echo "<h2 class='bg-success'>Password changed, you may now login.</h2>";
							break;
					}

				}

				
				?>

                <div id = "form-section">
                    <div id = "form-header"><img src="img/ds-icon20px.png"> Log in.</div><HR SIZE = "1" WIDTH="100%" NOSHADE>
                    <small>Username: </small><br />
                    <input type="text" name="user_name" id="username" placeholder="User Name" value="<?php if(isset($error)){ echo $_POST['user_name']; } ?>" tabindex="1">
                    <small>Password: </small><br />
                    <input type="password" name="user_password" id="password" placeholder="Password" tabindex="2">
                    <br /><br />
                    <input type="submit" name="submit" value="Login" tabindex="3"> <a href='reset.php'>Forgot your Password?</a>
                </div>
			</form>
    </div>
<?php 
//include header template
require('includes/footer.php'); 
?>

Nếu bạn chỉ trả về một hàng dữ liệu từ một truy vấn, bạn CÓ THỂ chỉ tìm nạp dữ liệu mảng mà không cần sử dụng WHILE

$row = $query->fetch(PDO::FETCH_ASSOC);

Trong trường hợp này, một biến $row sẽ có sẵn ở bất kỳ đâu bên dưới nơi nó được đặt

Nếu sử dụng WHILE, thì $row chỉ khả dụng trong WHILE khi nó lặp qua các bản ghi

Về việc bạn có sử dụng while hay không trong trường hợp này thì điều đó không quan trọng lắm, chỉ cần hiểu rằng bạn phải sử dụng $row trong WHILE. Vì vậy, trừ khi bạn cần tạo một mảng dữ liệu $ vì một số lý do khác trên trang này, tôi sẽ xóa nó. Chỉ cần đặt KEY phiên của bạn thành VALUE, ghi nhớ những gì tôi đã nói về WHILE, e. g

$_SESSION['user_id'] = $row['user_id'];

Bây giờ, giống như bất kỳ mảng nào có khóa và giá trị, bạn nên kiểm tra khóa và nếu tìm thấy, hãy sử dụng mảng KEY để lấy giá trị. Ví dụ: nếu bạn chỉ sử dụng và mảng KEY cho IF(điều kiện) hoặc lặp lại trực tiếp, bạn sẽ gặp lỗi nếu khóa không được đặt. Vì vậy, giả sử người dùng chưa đăng nhập thành công và bạn cố gắng sử dụng khóa này

if($_SESSION['user_id'] == 1){
    echo $_SESSION['user_id'];
}

Bạn sẽ nhận được thông báo lỗi. Chỉ số không xác định. user_id trong…

NẾU bạn kiểm tra với isset() hoặc array_key_exists() trước khi kiểm tra giá trị, thì mã của bạn sẽ hoạt động như mong đợi mà không có lỗi