2017-04-12 109 views
0

我需要一些幫助,試圖找出爲什麼我的PHP登錄重定向功能不正常。我首先嚐試了一個簡單的登錄,它工作正常。但是在我添加一條if語句以根據用戶級別重定向之後,它就會崩潰。php登錄重定向不工作

下面的代碼:

*編輯:我需要更多的幫助與代碼實際上重定向到用戶的角色級別的相應頁面。目前,無法登錄(無登錄錯誤),但不會將用戶發送到其相應的頁面(即:admin到管理頁面,用戶到用戶頁面,協調員到協調器頁面)。

<?php 
session_start(); 
include 'connect.php'; 


$email = $_POST["login_email"]; 
$pwd= $_POST["login_pwd"]; 
$role = $_POST["role"]; 

$sql = "SELECT * FROM users WHERE email='$email' AND password= '$pwd' AND role='$role' "; 


if($row != mysqli_fetch_assoc($result)){ 
    echo "Your user name or password is incorrect!"; 
    header("Location:login.html"); 
}else{ 
    $_SESSION['id'] = $row['id']; 
    if ($_SESSION['role'] == 'admin') { 
    header("Location: admin.php"); 
} else if ($_SESSION['role'] == 'editor') { 
    header("Location: editor.php"); 
} else if ($_SESSION['role'] == 'user') { 
    header("Location: user.php"); 
} 
    echo "Successful login!"; 
} 
+3

無法在標題前執行回顯。有標頭包含像'admin.php?MSG = Password_Incorrect''並且有admin.php回顯它 – Forbs

+0

**警告:**當使用'mysqli'時,您應該使用[參數化查詢](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)和[bind_param](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。不要使用字符串插值或串聯來實現這個,因爲你已經創建了一個嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**將'$ _POST','$ _GET'或**任何**用戶數據直接放入查詢中,因爲如果有人試圖利用您的錯誤,這可能會非常有害。 – FrankerZ

回答

0

位置標頭旨在告訴瀏覽器它應該將頁面重定向到另一個源。當你迴應內容時,你基本上說你已經完成發送標題,並開始內容。在發送位置的情況下,根本不應該發送任何內容,因爲該頁面在讀取標題時會簡單地重定向(根本不顯示任何內容)。

有關更多信息,請參閱this post這個問題。

+0

謝謝!將記住這一點,並做出正確的改變! – len

0

在你提供它的代碼顯示您設置的$role變量$role = $_POST["role"];但重定向當您使用$_SESSION['role'] == 'admin'來確定用戶的角色,但你從來沒有在代碼中設置$_SESSION['role']

請嘗試下面的代碼,看看它是否工作;

//other code above 
else{ 
    $_SESSION['id'] = $row['id']; 
    if ($role == 'admin') { 
    header("Location: admin.php"); 
} else if ($role == 'editor') { 
    header("Location: editor.php"); 
} else if ($role == 'user') { 
    header("Location: user.php"); 
} 
//other code below 

讓我知道它是否有幫助,或者如果您發現問題。

+0

這是一些非常瘋狂的恐怖。如果用戶禁用JavaScript,該怎麼辦?爲什麼甚至會將JavaScript帶入圖片? – FrankerZ

+0

我只是提出了一種在重定向之前顯示錯誤消息的方法。 –

+0

此代碼顯示消息「成功登錄」,但不會將用戶重定向到其相應頁面,即:管理頁面,用戶頁面,協調員頁面 – len