基于用户角色的登录始终重定向到同一页面

时间:2016-08-20 14:52:21

标签: php redirect

我想根据用户的角色将用户重定向到不同的页面。但问题是,无论用户是谁,他们总是会重定向到同一页面(第一个if语句引用的页面)。

这里是代码

<?php
include("config.php");
session_start();

if($_SERVER["REQUEST_METHOD"] == "POST") {

  $myusername = mysqli_real_escape_string($db,$_POST['username']);
  $mypassword = mysqli_real_escape_string($db,$_POST['password']);

  $sql = "SELECT * FROM user WHERE username = '$myusername' and password = '$mypassword'";
  $result = mysqli_query($db,$sql);
  $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
  $active = isset($row['active']);
  $count = mysqli_num_rows($result);

  $role = isset($row['role']);

    if($role == 'admin'){
        $link = 'admin.php';
    }
    elseif($role == 'user'){
        $link = 'user.php';
    }
    elseif($role == 'expert'){
        $link = 'expert.php';
    }
    else{
        $link = '404.php';
    }

  if($count == 1) {
    $_SESSION['username'] = $myusername;

    header("Location: ".$link."");
    exit(); 
  }else {
     $error = "Your Login Name or Password is invalid";
  }
}
?>

因此,如果我将第一个if语句上的admin.php替换为另一个页面,则用户将被重定向到那里。我已经按照不同案例的解决方案,但它没有用。

1 个答案:

答案 0 :(得分:2)

这一行

$role = isset($row['role']);

$role设置为true或可能false,但绝对不会将其设置为$row['role']的内容

我建议完全删除该行,因为你的if / elseif / else很好地涵盖了所有可能的选项。

$row数组中的值移动到标量变量中也是完全不必要的,这样会更简单

//$role = isset($row['role']);

if($row['role'] == 'admin'){
    $link = 'admin.php';
} elseif($row['role'] == 'user'){
    $link = 'user.php';
} elseif($row['role'] == 'expert'){
    $link = 'expert.php';
} else{
    $link = '404.php';
}
  

不幸的是,我必须提到:您的脚本存在SQL Injection Attack的风险   看看Little Bobby Tables偶然发生了什么   if you are escaping inputs, its not safe!   使用prepared parameterized statements

     

在数据库中存储纯文本密码也非常危险。数据库中最可能的攻击媒介是内部人员。因此,所有密码都应该是HASHED。 PHP提供password_hash()   和password_verify()请使用它们。

相关问题