簡體   English   中英

基於用戶角色的登錄始終重定向到同一頁面

[英]User-role based login always redirect to the same page

我想根據用戶使用PHP的角色將其重定向到其他頁面。 但是,問題是,無論用戶是誰,他們總是將重定向到同一頁面(第一個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,用戶將被重定向到該頁面。 我已經從不同的案例中遵循了解決方案,但是沒有成功。

這條線

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

$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注入攻擊的風險。看看Little Bobby Tables發生了什么,即使您轉義了輸入,也不安全! 使用准備好的參數化語句

將純文本密碼存儲在數據庫中也是非常危險的。 數據庫上最可能的攻擊媒介是內部人員。 因此,所有密碼都應哈希。 PHP提供password_hash()password_verify()請使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM