我正在创建一个登录页面。 下面的代码是当用户填写用户名和&密码输入字段。
但如果我输入用户名为'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.";
}
答案 0 :(得分:1)
$input['pass'] = htmlentities($_POST['username'], ENT_QUOTES);
更改为
$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);
虽然从逻辑上说这个错误不应该让你使用bum密码,但它应该拒绝任何密码与用户名不同的尝试
答案 1 :(得分:0)
看一下,这就搞定了
变化:
$stmt->num_rows > 0
要:
$stmt->num_rows == 1
首先,没有描述您的数据库是什么样的,所以谁知道有多少结果。此外,如果每个用户有1次登录,则该结果应该只包括1行。
答案 2 :(得分:0)
只是为了更新.. 现在已修复,这是我的愚蠢错误用户名&顶部的密码
$input['user'] = htmlentities($_POST['username'], ENT_QUOTES);
$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);
另外,我在IF ELSE条件下通过适当的比较来修复它,如
$stmt->num_rows != 0
感谢大家:)