遇到PHP问题

时间:2016-02-19 20:00:36

标签: php mysql mysqli

我的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();
}
}

谢谢。

1 个答案:

答案 0 :(得分:0)

queryexecute函数都执行您的查询。 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']