2014-04-15 107 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"); 

希望它会有所帮助。