我正在创建一个简单的人员面板,它只包含大约10个页面并使用单个sql表。 我的sql表由user_id,user_name,user_email,密码和rank
组成我正在尝试根据用户在数据库中的排名来显示特定内容,尽管我是PHP的初学者所以我甚至不确定我是否正确地从数据库中提取它。 / p>
$sql = "SELECT user_name, user_email, user_password_hash, user_id, rank
FROM users
WHERE user_name = '" . $user_name . "' OR user_email = '" . $user_name . "';";
$result_of_login_check = $this->db_connection->query($sql);
// if this user exists
if ($result_of_login_check->num_rows == 1) {
// get result row (as an object)
$result_row = $result_of_login_check->fetch_object();
// using PHP 5.5's password_verify() function to check if the provided password fits
// the hash of that user's password
if (password_verify($_POST['user_password'], $result_row->user_password_hash)) {
// write user data into PHP SESSION (a file on your server)
$_SESSION['user_name'] = $result_row->user_name;
$_SESSION['rank'] = $result_row->rank;
$_SESSION['user_email'] = $result_row->user_email;
$_SESSION['user_login_status'] = 1;
这是我的login.php文件 这是我用来尝试显示某个特定级别的代码。
我已经设法做到这一点,它会显示一些取决于用户名称的东西,这让我相信我没有正确调用排名。
<?php
if (isset($_SESSION['rank']) && $_SESSION['rank'] == admin) {
echo '<a href="/admin/" class="btn btn-danger">Admin</a>';
} else {
echo " ";
}
?>
答案 0 :(得分:1)
如果您发布的代码与您的文件中的代码完全相同,那么我认为以下代码行是您的问题:
if (isset($_SESSION['rank']) && $_SESSION['rank'] == admin) {
除非通过define函数定义 admin ,否则我认为它是一个字符串,因此您的代码应为:
if (isset($_SESSION['rank']) && $_SESSION['rank'] == 'admin') {
或者:
if (isset($_SESSION['rank']) && $_SESSION['rank'] == "admin") {
单引号或双引号都可以。我没有看到代码失败的任何其他原因。
我希望这会有所帮助。
跟进:
根据您的评论,您可以使用下一段代码来使用不同的排名:
if (isset($_SESSION['rank'])) {
if ($_SESSION['rank'] == 'admin') {
// do admin
} elseif ($_SESSION['rank'] == 'mod') {
// do mod
} elseif ($_SESSION['rank'] == 'member') {
// do member
}
}
您还可以使用开关/案例子句:
if (isset($_SESSION['rank'])) {
switch ($_SESSION['rank']) {
case: 'admin':
// do admin
break; // do not forget the breaks!
case: 'mod':
// do mod
break;
case: 'member':
// do member
break;
}
}
希望这能帮到你更多。