2015-12-04 55 views
1

你能幫我嗎我的代碼有問題嗎?下面的代碼是登錄過程頁面,我想將它重定向到特定的頁面,無論是管理主頁還是用戶主頁。當我運行它分配爲用戶的帳戶時,它將重定向到管理頁面。我沒有問題分配爲管理員帳戶,因爲它會自動重定向到管理頁面。PHP登錄重定向流程

session_start(); 
$message = ""; 

if(count($_POST) > 0){ 
    $conn = mysql_connect("localhost", "root", ""); 
    mysql_select_db("etransmittal", $conn); 
    $result = mysql_query("SELECT * FROM tbl_userlist WHERE username = '" . $_POST["userid"] . "' AND user_password = '" . $_POST["userpassword"] . "'"); 
    $row = mysql_fetch_array($result); 

    if(is_array($row)){ 
     $_SESSION['userid'] = $row['userid']; 
     $_SESSION['username'] = $row['username']; 
     $_SESSION['userrole'] = $row['userrole_id']; 
     $_SESSION['firstname'] = $row['fname']; 
     $_SESSION['middlename'] = $row['mname']; 
     $_SESSION['lastname'] = $row['lname']; 
     $_SESSION['nbu'] = $row['nbu']; 
     $_SESSION['department'] = $row['department']; 
     $_SESSION['branch'] = $row['branch']; 

    } 
    else{ 
     $message = "Invalid username or password"; 
    } 
} 

/*if(isset($_SESSION['userid'])){ 
    header("location: admin_homepage.php"); 
}*/ 

if(isset($_SESSION['userrole']) == '1'){ 
    header("location: admin_homepage.php"); 
} 

else if(isset($_SESSION['userrole']) == '2'){ 
    header("location: user_homepage.php"); 
} 
+1

你的if語句現在檢查如下:如果(真==「2」){} – Matheno

+0

你真的不應該寫代碼依賴於'mysql_'函數了。 MySQL擴展已經被棄用了多年(注意到這些文檔中的紅色警告框?),並且完全放棄在本週早些時候發佈的PHP7中。另請參閱[爲什麼不應該在PHP中使用mysql_ *函數?](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。因此,在運行最新PHP版本的服務器上,**此代碼將無法工作**。 – Oldskool

回答

3

isset - 檢測變量是否設定,並沒有NULL

您的代碼亂用if and isset。它是用作

if (isset($_SESSION['userrole']) && $_SESSION['userrole'] == '1') { 
    header("location: admin_homepage.php"); 
} else if (isset($_SESSION['userrole']) && $_SESSION['userrole'] == '2') { 
    header("location: user_homepage.php"); 
} 

http://php.net/manual/en/function.isset.php

http://php.net/manual/en/control-structures.if.php

注: - MySQL是不推薦改爲使用庫MySQLi或PDO

你的代碼是開放的SQL注入閱讀本 How can I prevent SQL injection in PHP?

普通密碼不要保存到數據庫

http://php.net/manual/en/function.password-hash.php

http://php.net/manual/en/faq.passwords.php

0

isset返回布爾,如果該值會話變量存在,它將返回true,否則返回false ...你需要檢查是否存在以及值,以便改變你的檢查

if(isset($_SESSION['userrole']) && $_SESSION['userrole']=='1'){ 
     header("location: admin_homepage.php"); 
} 
else{ 
    header("location: user_homepage.php"); 
} 

而且,傳遞參數直接用sql查詢可以導致SQL injection,請閱讀關於sql注入並使用bind params來避免它。

例做到這一點(把它用在我的項目之一)

$db = new PDO('mysql:dbname='.$mysql_dbname.';host='.$mysql_servername, $mysql_username, $mysql_password); 
$stmt = $db->prepare("SELECT ID, fromName, fromEmail, toName, toEmail, date, subject, body FROM messages WHERE ID = ?;"); 
$stmt->execute(array($messageid)); 
$data = $stmt->fetchAll(PDO::FETCH_ASSOC); 
+1

已經通過Saty, – Matheno

+0

回覆了我發佈了,看到他發佈了...讓我給它添加更多的東西.. @MHakvoort –