[英]Admin and normal user login system PHP MYSQL
我有一些代码尝试检查用户是管理员用户还是普通用户,然后将其与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");
希望它会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.