如何在会话中存储用户id,以用于在网页中进行回显?PHP会话
我有两个页面,分别是login.php和home.php。在这里login.php将设置用户ID和用户名会话。php将根据会话用户id呼出详细信息。我在存储用户id时遇到问题,它不会呼出详细信息。有什么解决办法吗 login.php如何在会话中存储用户id,以用于在网页中进行回显?PHP会话,php,html,mysql,session,userid,Php,Html,Mysql,Session,Userid,我有两个页面,分别是login.php和home.php。在这里login.php将设置用户ID和用户名会话。php将根据会话用户id呼出详细信息。我在存储用户id时遇到问题,它不会呼出详细信息。有什么解决办法吗 login.php session_start(); if(isset($_POST['loginbtn'])) { $username = preg_replace('#[^A-Za-z0-9]#i','',$_P
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>";
?>
这是您的问题-
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
您正在将空值赋值给
$dbid
和$dbuser
没有包含从数据库提取的数据的$row
对象:
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!";
}
在
$\u会话['username']
中存储$\u POST['username']
?当然,您需要在希望使用会话数组的每个页面顶部使用start\u session()
。@JayBlanchard,在主页还是登录页面?我在登录页面中使用了$\u SESSION['valid\u username']来设置会话。这是用户名,那么userid呢?session\u start()
必须位于您希望能够识别会话的每个页面的顶部。您只是在删除用户名和密码中的无效字符?这真是个坏主意。为什么要将我的密码
视为与我的密码
相同?相反,你应该告诉用户他们的语法无效,这样他们就可以更正它,而不是依赖于他们一无所知的行为。@JayBlanchard,只是提醒你,我在所有页面中都有session_start(),但它仍然不起作用。我收到一个错误,说是致命错误:无法将stdClass类型的对象用作arrayUpdated,请立即检查,这是因为fetch()方法返回的是一个对象,而不是ArrayTanks Cristian。你真是太棒了。一句话,太棒了。