我的PHP代码不会验证数据到数据库,它会一直返回说无效的登录数据,即使数据是正确的。
这个问题发生在我从使用MySQL(工作正常)切换到mysqli后更安全。
连接文件数据是合理的,所以我不知道为什么代码会一直说无效的登录数据。
session_start();
include_once("connect.php");
if (isset($_POST['username'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username=?
AND password=? LIMIT 1");
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
$stmt->fetch();
$res = $mysqli->query($stmt);
if (mysqli_num_rows($res) == 1) {
$row = $res->fetch_assoc();
$_SESSION['uid'] = $row['id'];
$_SESSION['username'] = $row['username'];
header("Location: forum.php");
exit();
} else{
echo "Invalid login information. Please return to previous page.";
exit();
}
}
谢谢。
答案 0 :(得分:0)
query
和execute
函数都执行您的查询。 query
不适用于预准备语句。
尝试:
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username=?
AND password=? LIMIT 1");
$stmt->bind_param('ss', $username, $password);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows == 1) {
$row = $stmt->fetch_assoc();
$_SESSION['uid'] = $row['id'];
$_SESSION['username'] = $row['username'];
header("Location: forum.php");
exit();
} else{
echo "Invalid login information. Please return to previous page.";
exit();
}
目前还不清楚您是否已经进行哈希处理,但是应该对用户密码进行哈希处理。
此外,您不必告诉用户返回上一页,而是可以在标题函数中传递参数,以便为用户显示消息。
类似的东西:
header('location: http://domain.com/page.php?message=Your+username+or+password+were+incorrect+please+try+again');
取代
echo "Invalid login information. Please return to previous page.";
然后在上一页检查$_GET['message']
。