我有一些代码,试图检查用户是管理员还是普通用户,然后将其与SQL表进行比较,以确定打开的页面(管理员页面与普通用户页面)。
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>';
}
}
}
}
没有错误,但是admin值似乎没有什么区别,默认情况下每次都会打开'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
错误在于如何检查用户是否为管理员:
if ($admin == 1)
替换为:
if (isset($admin))
此外,使用header()
:后,您需要exit
或die
if (isset($admin))
{
$_SESSION['username'] = $user;
header("location: admin.php");
exit;
} else {
$_SESSION['username'] = $user;
header("location: users.php");
exit;
}
首先,您需要了解mysql转义/最佳实践。您的脚本容易受到SQL注入的攻击。网上有很多不错的资源,或者在这里搜索SQL注入PHP,如果不确定的话,可以帮助你解释这一点。
$_POST['admin']
值是如何设置的,你能在这里发布一个你的表单示例吗?我猜发送的值与您的上述条件不匹配,所以这可能是原因。
这可能很简单,只需将if语句更改为===
而不是==
,但为了确保安全,我需要查看表单的源核心。
在数据库查询-中进行一些更正后尝试这个
$query = mysqli_query($dbcon, "SELECT * FROM users WHERE username = '".$user."'' and password = '".$pass."''") or die ("Can't query the database");
希望它能有所帮助。