2016-01-18 88 views
0

美好的一天, 我在做一個網站,我有一個小問題。當我登錄一個用戶時,如果他是一個簡單的用戶或管理員,php代碼會從數據庫中獲取信息。重定向PHP解析角色

<?php 
require("session.php"); 
if(!empty($_POST)){ 
    $user=''; 
    $log_control=false; 
    $q="SELECT id,username,email,salt,password FROM users WHERE username=:username LIMIT 1"; 
    $q_par=array(':username'=>$_POST['user']); 
    try{ 
     $statment=$dbh->prepare($q); 
     $res=$statment->execute($q_par); 
    }catch(PDOException $e) 
    { 
    die("Can't execute query:" . $e->getMessage()); 
    }  
     $row=$statment->fetch(); 
     if($row) 
     { 
      $pswd_check=hash('sha256', 
      $_POST['password'] . $row['salt']); 
      for($i=0;$i<65536;$i++) 
      { $pswd_check=hash('sha256', $pswd_check . $row['salt']); } 

      if($pswd_check===$row['password']) 
      { $log_control=true; } 
      if($log_control) 
      { 
      $q="SELECT userrole FROM users WHERE username=:username LIMIT 1"; 

      $q_par=array(':username'=>$_POST['user']); 
    try{ 
     $statment=$dbh->prepare($q); 
     $res=$statment->execute($q_par); 
    }catch(PDOException $e) 
    { 
    die("Can't execute query:" . $e->getMessage()); 
    } 
    $role = $statment->fetchColumn(); 


       if($role=='U'){ 
       unset($row['salt']); 
       unset($row['password']); 
       $_SESSION['user'] = $row; 
       header("Location: user.php"); 
       die("Redirecting to: user.php"); 
       } 
       if($role=='S'){ 
       unset($row['salt']); 
       unset($row['password']); 
       $_SESSION['user'] = $row; 
       header("Location: admin.php"); 
       die("Redirecting to: admin.php"); 
       } 

      }else 
      { 
      echo '<div class="alert">Password or username is wrong!</div>'; 
       $user=htmlentities($_POST['user'], 
       ENT_QUOTES, 'UTF-8'); 
      } 
     } 
     } ?> 

所以,這是我試圖登錄用戶的一部分。但在同一頁面的代碼的其他部分,我試圖控制用戶是否被盜用。同時,如果他是用戶或者他是管理員,我正試圖獲取信息。 有了這個:

<?php 

if(isset($_SESSION['user'])){ 
       if($_SESSION['userrole']=='U'){ 
       header("Location: user.php"); 
       } 
       if($_SESSION['userrole']=='S'){   
     header("Location: admin.php"); 
     }} 
?> 

但是當我到達此頁再次(登錄後),它不重定向我,它說,UserRole的是不確定的,我要重新登錄。有什麼問題?

+0

你可能忘了'session_start()'。這必須在使用$ _SESSION的** EVERY **腳本上執行... –

+0

您在哪裏定義_SESSION ['userrole'] – devpro

+1

什麼是「網絡端」? – CodeGodie

回答

1

錯誤非常明顯未定義變量

你沒有定義在代碼中這個變量:

$_SESSION['userrole'] 

您的會話工作正常,你只需要定義您所定義的$ _SESSION [「用戶」]角色。

+1

您的意思是$ _SESSION ['userrole'] = $ row? – Lemmy

+1

是的,像'$ _SESSION ['userrole'] = $ row ['role']' –

+0

@lemmy如心臟提到 – devpro