基本上我很难获得' user_id'数据库中的值并将其存储在会话中。
我有什么:
我有一个登录页面,用于请求用户的用户名和密码。提交后,他们将被带到认证页面。提交了匹配组合,用户被授予访问权限 - 如果没有匹配的组合,则会将其重定向。
在MySQL数据库中,我有一个列为' user_id','用户名'和密码'。我的身份验证页面是:
<?php
require "connect.php"; // connects to db
connection();
session_start();
$username=$_POST['username'];
$password=$_POST['password'];
$user_id=$row['user_id'];
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['user_id'] = $user_id;
$result= mysql_query("SELECT * FROM users WHERE username='$username' and password='$password' and type='user'");
if(($row = mysql_fetch_array($result)))
{
print_r($_SESSION);
//header('Location: welcome.php');
}
else
{
header('Location: not-authorized.php');
}
?>
当我打印会话时,我显示为:
Array ( [username] => cm89 [password] => conrad1 [user_id] => )
我尝试了许多不同的方法,并且无法将用户ID存储到会话中。 &#39; user_id&#39;是一个数值,由auto incriminate生成。
如果有人能把我放在正确的轨道上,那就太好了。谢谢。
答案 0 :(得分:1)
$row['user_id']
不存在。你凭空掏出它。这就是为什么$_SESSION['user_id']
没有价值的原因。
在查询数据库之后,您需要获取该值。不是之前。
<?php
require "connect.php"; // connects to db
connection();
session_start();
$username=$_POST['username'];
$password=$_POST['password'];
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$result= mysql_query("SELECT * FROM users WHERE username='$username' and password='$password' and type='user'");
if(mysql_num_rows($result))
{
$row = mysql_fetch_array($result);
$user_id=$row['user_id'];
$_SESSION['user_id'] = $user_id;
// Or more concisely
// $_SESSION['user_id'] = $row['user_id'];
header('Location: welcome.php');
}
else
{
header('Location: not-authorized.php');
}
?>
备注强>:
您不进行任何错误检查。您应该看看是否存在MySQL错误并处理它。查看mysql_error()
。
请勿以纯文本格式存储密码。这是一个巨大的安全禁忌。请查看password hashing。
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO,here is a good tutorial。