2014-04-15 102 views
0

我有一些代碼,試圖檢查用戶是管理員還是普通用戶,然後將其與SQL表進行比較以確定打開哪個頁面(管理頁面與普通用戶頁面)。管理員和普通用戶登錄系統PHP MYSQL

if (isset($_POST['submit'])) 
{ 
    $user = $_POST['user']; 
    $pass = $_POST['pass']; 
    $admin = $_POST['admin']; 

    if($user == "" || $pass == "") 
    { 
     echo '<div id ="errormsg">Please fill in all fields</div>'; 
    } 

    else 
    { 
     $query = mysqli_query($dbcon, "SELECT * FROM users WHERE username = '$user' 
     and password = '$pass' and admin = '$admin' ") or die ("Can't query the database"); 
     $count = mysqli_num_rows($query); 

     if($count == 1) 
     { 
      if ($admin == 1) 
      { 
       $_SESSION['username'] = $user; 
       header("location: admin.php"); 
      } 
      else if ($admin == 0) 
      { 
       $_SESSION['username'] = $user; 
       header("location: users.php"); 
      } 
      else 
      { 
       echo '<div id="errormsg">No matches, try again</div>'; 
      } 
     } 
    } 
} 

有沒有錯誤,但是管理員價值似乎並不有所作爲,默認打開'users.php'每次。 $ admin是一個複選框,選中時值爲'1',邏輯是根據數據庫檢查該值。任何人都可以解決這個問題嗎?

這是HTML表單:

<form action="<?=$_SERVER['PHP_SELF']?>" method="post"> 
    <fieldset> 
    <label class="login">Username:</label><input type="text" name="user" /><br /> 
    <label class="login">Password:</label><input type="password" name="pass" /><br /> 
    <label class="login">Admin?:</label><input type="checkbox" value="1" name="admin" /><br/> 

    <input type="submit" name="submit" value="Login" /> 
    </fieldset> 
</form 
+0

顯示我們'的HTML admin'選擇 –

+0

管理員值不工作,因爲它適當地顯示了在通過phpMyAdmin的 – ajm

+0

@OP SQL表:使用準備語句正確,以避免SQLI – Misiur

回答

0

首先,你需要有mysql的一個讀了逃逸/最佳實踐。你的腳本在這裏很容易被SQL注入。 網上有很多很好的資源,或者在這裏搜索SQL injection PHP,以幫助向你解釋這個如果不確定。

$_POST['admin']值如何設置,您可以在此處發佈您的表單示例嗎? 我猜測發送的價值與上面的條件不符,所以這可能是原因。

這可能與將if語句更改爲===而非==一樣簡單,但要確保我需要查看錶單的源內核。

+0

我明白關於注射和保護,對於這個小型私人項目而言,這並非必要。我已經在我編輯的問題中發佈了html表單 – ajm

+1

您需要檢查管理員值是否爲字符串 - 只需在引號中加上1 - if($ admin =='1'){} – steve

+0

已正確登錄,但是對於非管理員用戶,我現在收到有關$ admin變量的錯誤!從煎鍋裏拿出來.. – ajm

1

的錯誤是你如何檢查,如果用戶是admin:

if ($admin == 1) 

替換爲這樣:

if (isset($admin)) 

此外,您還需要exitdie使用header()後:

if (isset($admin)) 
{ 
    $_SESSION['username'] = $user; 
    header("location: admin.php"); 
    exit; 
} else { 
    $_SESSION['username'] = $user; 
    header("location: users.php"); 
    exit; 
} 
0

試試這個在數據庫中有一些修正的問題ry-

$query = mysqli_query($dbcon, "SELECT * FROM users WHERE username = '".$user."'' and password = '".$pass."''") or die ("Can't query the database"); 

希望它會有所幫助。