我正在创建一个登录页面。下面的代码是用户填写用户名和密码输入字段时。
但是,如果我输入用户名为"admin"并输入错误的密码,它仍然接受它并将我重定向到会员页面。
请注意,我刚刚开始进入PHP。
$input['user'] = htmlentities($_POST['username'], ENT_QUOTES);
$input['pass'] = htmlentities($_POST['username'], ENT_QUOTES);
if ($stmt = $mysqli->prepare("SELECT * FROM members WHERE username=? AND password=?"))
{
$stmt->bind_param("ss", $input['user'], md5($input['pass'] . $config['salt']));
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0)
{
//successful login/set session
$_SESSION['username'] = $input['user'];
header("Location: members.php");
}
else
{
$error['alert'] = "Error: Username/password incorrect!";
include('views/v_login.php');
}
}
else
{
echo "Error: Could not prepare MySqli result.";
}
$input['pass'] = htmlentities($_POST['username'], ENT_QUOTES);
更改为
$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);
虽然,从逻辑上讲,此错误不应该让你使用bum密码,但它应该拒绝任何密码与用户名不同的尝试。
看看它,这个突出了
改变:
$stmt->num_rows > 0
自:
$stmt->num_rows == 1
首先,没有关于数据库外观的描述,所以谁知道有多少结果。此外,如果每个用户有 1 个登录名,则该结果应仅包含 1 行。
只是为了更新。这现在已经修复了,这是我愚蠢的误会用户名和密码在顶部
$input['user'] = htmlentities($_POST['username'], ENT_QUOTES);
$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);
此外,我在 IF ELSE 条件下通过适当的比较修复了它,因为
$stmt->num_rows != 0
感谢大家:)