2013-03-25 46 views
0

,所以我有這個登錄頁面的重定向取決於用戶名

<?php 
    require("common.php"); 
    $submitted_username = ''; 
    if(!empty($_POST)) 
    { 
     $query = " 
      SELECT 
       id, 
       username, 
       password, 
       salt, 
       email 
      FROM users 
      WHERE 
       username = :username 
     "; 
     $query_params = array(
      ':username' => $_POST['username'] 
     ); 

     try 
     { 
      $stmt = $db->prepare($query); 
      $result = $stmt->execute($query_params); 
     } 
     catch(PDOException $ex) 
     { 
      die("Failed to run query: " . $ex->getMessage()); 
     } 
     $login_ok = false; 
     $row = $stmt->fetch(); 
     if($row) 
     { 
      $check_password = hash('sha256', $_POST['password'] . $row['salt']); 
      for($round = 0; $round < 65536; $round++) 
      { 
       $check_password = hash('sha256', $check_password . $row['salt']); 
      } 

      if($check_password === $row['password']) 
      { 
       $login_ok = true; 
      } 
     } 
     if($login_ok) 
     { 
      unset($row['salt']); 
      unset($row['password']); 
      $_SESSION['user'] = $row; 
      header("Location: private.php"); 
      die("Redirecting to: private.php"); 
     } 
     else 
     { 
      print("Login Failed."); 
      $submitted_username = htmlentities($_POST['username'], ENT_QUOTES, 'UTF-8'); 
     } 
    } 

?> 
<h1>Login</h1> 
<form action="login.php" method="post"> 
    Username:<br /> 
    <input type="text" name="username" value="<?php echo $submitted_username; ?>" /> 
    <br /><br /> 
    Password:<br /> 
    <input type="password" name="password" value="" /> 
    <br /><br /> 
    <input type="submit" value="Login" /> 
</form> 

會議(的common.php)

<?php 

    // These variables define the connection information for your MySQL database 
    $username = "root"; 
    $password = ""; 
    $host = "localhost"; 
    $dbname = "phplogin"; 


    $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
    try 
    { 
     $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
    } 
    catch(PDOException $ex) 
    { 
     die("Failed to connect to the database: " . $ex->getMessage()); 
    } 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 

    if(function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) 
    { 
     function undo_magic_quotes_gpc(&$array) 
     { 
      foreach($array as &$value) 
      { 
       if(is_array($value)) 
       { 
        undo_magic_quotes_gpc($value); 
       } 
       else 
       { 
        $value = stripslashes($value); 
       } 
      } 
     } 

     undo_magic_quotes_gpc($_POST); 
     undo_magic_quotes_gpc($_GET); 
     undo_magic_quotes_gpc($_COOKIE); 
    } 

    header('Content-Type: text/html; charset=utf-8'); 
    session_start(); 
?> 

我想要做的是誰時,登錄用戶有「身份證」的「5」,它會被重定向到另一個不同於private.php代碼中所述的頁面。如果它發現「id」等於五,我可以將它重定向到另一個頁面嗎?它就像某種管理頁面。

+0

如果使用條件if($ login_ok)block ..? – alwaysLearn 2013-03-25 08:32:58

回答

1

是的,你可以做到這一點。試試這個,你已經寫

if($login_ok) 
     { 
      unset($row['salt']); 
      unset($row['password']); 
      $_SESSION['user'] = $row; 
      if($row['id']==5) 
      header("Location: yourpage.php"); 
      else 
      header("Location: private.php"); 
     } 
0

您需要存儲idsession然後就經常檢查session

if(isset($_SESSION['id']) 
{ 
    //retrieve data of user 5 from database 
} 
else 
{ 
    //redirect to login page 
} 
0
  1. 不要拿用戶是否是管理員或使用id非管理員,添加在數據庫中的字段說type,如果用戶是admintypeadmin,如果不讓它成爲user

  2. 在檢查用戶登錄數據庫的特定用戶type現場後,按照該重定向。

考慮到這是對重定向代碼:

if($login_ok) 
    { 
     unset($row['salt']); 
     unset($row['password']); 
     $_SESSION['user'] = $row; 
     if($row['type'] == "admin"){ 
      header("Location: private.php"); 
      die("Redirecting to: private.php"); 
     } 
     else{ 
      header("Location: otherpage.php"); 
      die("Redirecting to: private.php"); 
     } 

    } 

優勢:

  1. 如果刪除用戶或添加新用戶,它不會影響你的編碼部分。
  2. 你可以有多個管理員,但你只需要檢查一個條件(不需要檢查每個用戶的ID)。
0
if($_SESSION['id']==5) 
    header("Location: yourpage.php"); 
else 
    header("Location: private.php"); 
exit;