变量无法存储在会话中

3

我正在尝试在控制面板中存储用户的“等级”,并根据给定的等级显示不同的选项。我使用了与存储和显示用户名相同的方法,该用户名显示在每个页面的顶部,并且运行良好。但是我无法弄清楚为什么它对于等级值不起作用,但我知道它没有保存在会话中。这是不起作用的代码:

$username = ($_POST['username']);
$password = hash('sha512', $_POST['password']);

$dbhost = 'mysql:host=██████████████████████;dbname=███████████';
$dbuser = '███████████';
$dbpassword = '████████████████';

try {
$db = new PDO($dbhost, $dbuser, $dbpassword);
$statement = $db->prepare("select password from users where email = :name");
$statement->execute(array(':name' => $username));
$result = $statement->fetch();
$pass = $result[password];
$rank = $result[rank];}

catch(PDOException $e) {echo $e->getMessage();}

if ($password == $pass) {

session_start();
$_SESSION['username'] = $username;
$_SESSION['rank'] = $rank;
header('Location: http://█████████.ca/manage.php');

}
else{
include'../../includes/head.inc';
echo '<h1>Incorrect username or password.</h1>';
include'../../includes/footer.inc';
}

我对PDO也是新手,因此我的密码验证方法相当粗糙。


2
哦,这是我们的小猫米滴。我们一直在想念它们。 - SomeKittens
2
在调用 header('Location: ...') 后,不要忘记调用 exit!否则代码将在 header 调用后继续运行,并对黑客可见! - Emil Vikström
2
ThiefMaster,我觉得这很分散注意力 :-/ - Emil Vikström
谢谢你的提示,Emil。我现在会添加它。 - user1391838
1个回答

3

并不是它没有保存排名 - 显然你没有从查询中检索它。你只要求密码。用户名来自其他地方:

$db = new PDO($dbhost, $dbuser, $dbpassword);
$statement = $db->prepare("select password from users where email = :name");

// Should be select password, rank

$statement->execute(array(':name' => $username));
$result = $statement->fetch();
$pass = $result[password];
$rank = $result[rank];}

1
此外,适当引用数组索引也是必要的,例如 $pass = $result['password'];$rank = $result['rank']; - Bart
我知道这只是一个小错误,哈哈。非常感谢你的帮助,现在正在取得进展! - user1391838

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接