2016-09-16 26 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%的成功,现在只需要尝试并确保密码正确。

相关问题