2016-09-16 28 views
0

如果我是用戶,我會去用戶頁面,如果我是管理員,我會去管理頁面。這裏是我的代碼如何確定我是用戶還是管理員?

<?php 
    require('config.php'); 

    if(isset($_POST['submit'])) 
    { 
     $uname = mysql_escape_string($_POST['uname']); 
     $pass = mysql_escape_string($_POST['pass']); 
     $pass = md5($pass); 

     $check = mysql_query("SELECT * FROM `user` WHERE `uname` = '$uname' AND `pass` = '$pass'"); 
     if(mysql_num_rows($check) > 0){ 
     header("Location: adminhome.php"); 

     } 
     else{ 

     echo "Wrong password"; 
     } 
    } 
    else{ 

     $form = <<<EOT 
     <form action="login.php" method="POST"> 
    <p>Doesn't have an account yet? </p> 
    <title>Login</title> 
      <p align ="left"><a href="register.php">Register</a></p> 
    <center> 
     Username: <input type="text" name="uname"><br> 
     Password: <input type="password" name="pass"><br> 
     <input type="submit" name="submit" value="Log in"> 

    EOT; 

    echo $form; 
    } 
    ?> 
+4

添加數據庫標誌'isAdmin'和檢查。 –

+4

'mysql_escape_string' <==請***不要使用DEPRECATED'mysql'擴展名***。它在幾年前已被棄用,並從PHP7中刪除。改用「PDO」或「mysqli」。並使用準備好的語句。 –

+0

在你的表格中添加一列作爲is_admin和chk這個 – devpro

回答

0

有幾件事情我想在這裏向你指出:

  1. 函數mysql_escape_string =>您768,16使用PDO或mysqli的以利亞提及。您可以閱讀關於它們的信息here

  2. 您的選擇查詢顯示您沒有用於檢查用戶是管理員還是用戶的標誌。您可以在表中添加一列,像is_Admin,並有場店1管理員和其他用戶的值0。將用戶輸入表格時應該這樣做。因爲我看到你有register.php用於註冊用戶的系統,註冊用戶將有0組,你需要創建一個管理員單獨的註冊(或硬編碼的db錶行本身設置在入口按照你的情況,is_Admin爲1)

  3. 一旦你有了第二步,現在你也將在你的select語句中檢查is_Admin = 1。而一旦這是真的,你將其重定向到adminhome.php頁,但它並不像你用會話工作。你如何確保在adminhome.php頁面,它是一個管理員。任何人都可以簡單地輸入YOUR_URL/adminhome.php沒有來到這個地方?你需要它解釋here

  4. 在你else語句爲NUM_ROWS一些基於角色的訪問控制,僅僅是因爲沒有找到記錄並不意味着密碼是錯誤的。這可能會誤導用戶嘗試登錄。事實上,我認爲系統不應該告訴用戶他們的輸入(用戶名或密碼)是不正確的。如果它是一個不成功的登錄嘗試,總輸出像「名或密碼錯誤」我看到一些網站他們的,上面寫着:用戶名和Pasword不正確=>如果兩個是不正確的。只是密碼不正確(如果只是不正確)。我不明白爲什麼它會這樣做,但這樣你已經爲黑客(如果是這種情況)提供了50%的成功,現在只需要嘗試並確保密碼正確。

相關問題