Как я могу сохранить идентификатор пользователя в сеансе, который можно использовать для вывода на веб-странице? PHP сессия

У меня есть две страницы, которые являются login.php и home.php. Здесь login.php установит сеансы, которые являются ИД-пользователя и имени пользователя. Рядом с home.php будут отображаться детали, основанные на идентификаторе пользователя сеанса. У меня проблема с сохранением идентификатора пользователя, и он не отображает детали. Есть ли решение?

login.php

        session_start(); 
         if(isset($_POST['loginbtn']))
        {
         $username = preg_replace('#[^A-Za-z0-9]#i','',$_POST['username']); 
         $password =preg_replace('#[^A-Za-z0-9]#i','',$_POST['password']); 

    $pdo = new PDO('mysql:host=localhost;dbname=dbname','',''); 

    $sql = "SELECT teacher_id, username, password FROM teacher 
    WHERE username =:username and password =:password"; 

    $stmt = $pdo->prepare($sql); 

    $stmt->bindParam(":username", $_POST['username']); 
    $stmt->bindParam(":password", $_POST['password']); 
    $stmt->execute(); 

    if($result=$stmt->fetch(PDO::FETCH_OBJ))
    {
        $dbid = $row['teacher_id']; 
        $_SESSION['valid_teacherId'] = $dbid; 

        $dbuser = $row['username']; 
        $_SESSION['valid_username'] = $username; 

        $dbpass = $row['password']; 

        if ($password && $username)
        {
            header("location: home.php?teacher=" .$username);  
        } 
    else {
    echo "Please input username or password"; 
  }
        } 
    else{
        echo "Please insert a valid username or password"; 
    }
} else{
        header("location: index.php");  
}
 ?> 

home.php

 <?php
 error_reporting(E_ALL ^ E_NOTICE); 
 session_start();
 $userid = $_SESSION['valid_teacherId']; 
 $username = $_SESSION['valid_username']; 
 ?>

<?php
$con=mysqli_connect("localhost", "username", "", "dbname");
 if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  $result = mysqli_query ($con,"SELECT * FROM classroom WHERE teacher_id = $userid");

 echo '<table class="table" border="2">
 <tr>
   <th>Year</th>
   <th>Class no</th>
   <th>Section</th>
    </tr>';

    while($row = mysqli_fetch_array($result))

     {
     echo "<tr>
       <td>" . $row['year'] . "</td>
      <td>" . $row['class_no'] . "</td>
     <td>" . $row['section'] . "</td>
      </tr>";
    }
      echo "</table>";
       ?>

2 ответа

Решение

Вы присваиваете нулевое значение $dbid а также $dbuser здесь нет $row Объект Witch содержит ваши извлеченные данные из базы данных:

if($result=$stmt->fetch(PDO::FETCH_OBJ)){
    $dbid = $result->teacher_id; 
    $_SESSION['valid_teacherId'] = $dbid; 
    $dbuser = $result->username; 
    $_SESSION['valid_username'] = $username; 
    $dbpass = $result->password; 
    if (isset($password) && isset($username)) header("location: home.php?teacher=" .$username);  
}else
    echo "Please input username or password"; 

Тогда в вашем home.php скрипт, который вы должны проверить, установлен ли сеанс на самом деле с помощью isset.

$userid = $_SESSION['valid_teacherId']; 
$username = $_SESSION['valid_username']; 

if (isset($userid) && isset($username)) {
    //continue
    //here
}else{
    //user is not logged in
    echo "Please login!";
}

Вот ваша проблема -

if($result=$stmt->fetch(PDO::FETCH_OBJ)) // requesting $result
    {
        $dbid = $row['teacher_id'];  // using $row
        $_SESSION['valid_teacherId'] = $dbid; 

        $dbuser = $row['username']; // using $row
        $_SESSION['valid_username'] = $username; 

        $dbpass = $row['password']; // using $row

Вам нужно изменить $row в $result или наоборот, и вам нужно использовать ссылки на объекты:

if($result=$stmt->fetch(PDO::FETCH_OBJ)) // requesting $result
        {
            $dbid = $row->teacher_id;  // using $row, note syntax change
            $_SESSION['valid_teacherId'] = $dbid; 

            $dbuser = $row->username; // using $row, note syntax change
            $_SESSION['valid_username'] = $username; 

            $dbpass = $row->password; // using $row, note syntax change
Другие вопросы по тегам