【问题标题】:Having problems with PHP [closed]PHP有问题[关闭]
【发布时间】:2016-02-19 20:00:35
【问题描述】:

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

谢谢。

【问题讨论】:

标签: php mysql mysqli


【解决方案1】:

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']

【讨论】:

  • 成功了,非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 2015-11-26
  • 2015-04-10
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多