2013-05-21 26 views
0

我想從我的數據庫中設置特定用戶的會話(admin) 想法是,如果管理員登錄,他將重定向到管理頁面。並會有更多的特權。如何爲特定用戶設置會話

session_start(); 
require 'funcs.php'; 

$error = FALSE; 

if (! empty($_POST)) { 
    $username = $_POST['username']; 
    $password = md5($_POST['password']); 
    $sql = "SELECT * FROM `users` WHERE 
      `username` = '$username' AND 
      `password` = '$password' LIMIT 1"; 





    $result = query($sql,TRUE); 
    if(! empty($result)) { 
     $_SESSION['name'] = $result[0]['fullname']; 
     $_SESSION['user'] = $result[0]['username']; 
     header("Location: index.php"); 
     die; 
    } else { 
     $error = TRUE; 
    } 
+1

不會死......這是病態和它不是讓你的會話連載本身:) ...而是返回。 – Orangepill

+1

@Orangepill這是常規的,建議在'header()'重定向之後顯式退出(與'die()'相同),以防止執行'header()'後面的任何代碼,這有時會發生。 –

+0

*退出*也是一種替代 –

回答

0

我會通過增加新的列到我的表即user_level 啓動這個標誌將幫助你確定哪些用戶是管理員和用戶不是。然後您可以簡單地標記分配給另一個會話值:

$_SESSION['userlevel'] = $result[0]['user_level']; 

那麼你可以做if/else檢查這個值...

編輯: 你的表結構應該是這樣的:

id, username, password, user_level = (normal|admin) 

user_level值應該是普通用戶或管理員用戶,默認情況下,當您設置它時。它應該是一個普通的用戶,除非你想讓這個用戶成爲一個管理員,那麼你將這個列設置爲「admin」。

現在要你的代碼:

session_start(); 
require 'funcs.php'; 

$error = FALSE; 

if (! empty($_POST)) { 
    $username = $_POST['username']; 
    $password = md5($_POST['password']); 
    $sql = "SELECT * FROM `users` WHERE 
      `username` = '$username' AND 
      `password` = '$password' LIMIT 1"; 

    $result = query($sql,TRUE); 
    if(! empty($result)) { 
     $_SESSION['name'] = $result[0]['fullname']; 
     $_SESSION['user'] = $result[0]['username']; 
     $_SESSION['userlevel'] = $result[0]['user_level']; 

     if($_SESSION['userlevel'] === 'admin') 
     { 
      //go to admin page 
      header("Location: admin.php"); 
     } 
     else 
     { 
      header("Location: index.php"); 
     } 
     exit; 
    } else { 
     $error = TRUE; 
    } 

現在在你的管理頁面,您需要檢查,如果該用戶實際上是在所有的管理頁面中做這個程序管理員:

if(!isset($_SESSION['userlevel']) || $_SESSION['userlevel'] !== 'admin') //you can add more checks 
{ 
    //redirect to login page 
    header("Location: login.php"); 
} 

類似的東西...

+0

你是什麼意思分配國旗?即時通訊新的PHP請原諒我:/ –

+0

@OfirKitlaro - 看到更新的答案 – SolidSnake

+0

你能向我描述什麼我應該在我的數據庫中的user_level值? –

0

你可以在你的數據庫(「用戶」,「管理員」)添加USERTYPE ENUM領域,有一個硬編碼的歡迎頁面。正如已經告訴你有逃跑的用戶名和密碼,以避免SQL注入(例子是MySQL)

$username = $_POST['username']; 
    $password = md5($_POST['password']); 
    $sql = "SELECT * FROM `users` WHERE 
      `username` = '". mysql_real_escape_string($username)."' AND 
      `password` = '". mysql_real_escape_string($password)."' LIMIT 1"; 
    $result = query($sql,TRUE); 
    if(! empty($result)) { 
     $_SESSION['name'] = $result[0]['fullname']; 
     $_SESSION['user'] = $result[0]['username']; 
     $_SESSION['group'] = $result[0]['usertype']; 
     header("Location: index_".$result[0]['usertype'].".php"); 
     die; 
    } else { 
     $error = TRUE; 
    } 
的用戶會被重定向到* index_ADMIN.php *或* index_USER.php *的例子

。你可以檢查$ _SESSION [「羣」],以確定允許採取什麼行動或不

0

您寫的代碼將大致用於發送用戶數據庫中的用戶併成功登錄index.php頁面。如果您上面編寫的代碼實際上是IN index.php,那麼在調用session_start()之後但在SQL查找之前您需要代碼來檢查用戶是否已登錄。

如果該用戶是「管理員「,然後給用戶你想要的額外特權。您需要在任何想要顯示管理員或登錄用戶的網頁上以相同的方式檢查會話變量。例如,你的頁面可能有一個檢查是這樣的:

<?php 
// if session already started, this loads $_SESSION with existing values: 
session_start(); 

if(isset($_SESSION['user'])) { 
    // Code for Logged members 
    if ($_SESSION['user'] === "admin") { 
     // Code to show for admin user 
    } 
    else { 
     // code to show logged-in non-admin users 
    } 
} 
else { 
    // Code to show not-logged in users 
} 
?> 
2
​​

HTML腳本:

<form id="login_form" name="login_form" method="post"> 
<input name="username" type="text" id="username" value="<?php echo $_POST['username']?>" /> 
<input name="password" type="password" id="password" /> 
<input name="btnlogin" type="submit" value="Login" /> 
</form> 
+0

謝謝.....它爲我的單身用戶管理爲管理員 – Ayesha

相關問題