Как я могу сохранить идентификатор пользователя в сеансе, который можно использовать для вывода на веб-странице? 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