即使提供了错误的用户名和密码,PHP登录脚本也会重定向

即使提供了错误的用户名和密码,PHP登录脚本也会重定向,php,sqlite,redirect,login,Php,Sqlite,Redirect,Login,这就是密码 <?php //Start session session_start(); //Then we retrieve the posted values for user and password. $username = $_POST['username']; $password = $_POST['password']; //Users defined in a SQLite database $db = new PDO("sqlite:/www/test.db");

这就是密码

<?php

//Start session
session_start();

//Then we retrieve the posted values for user and password.
$username = $_POST['username'];
$password = $_POST['password'];

//Users defined in a SQLite database
$db = new PDO("sqlite:/www/test.db");
$result = $db->query("SELECT COUNT(*) FROM users WHERE Username = '$username' AND Password = '$password'");

if ($result > 0)
{
  //If user and pass match any of the defined users
  $_SESSION['loggedin'] = true;
  // close the database connection
  unset($db);
  header("Location: index.php");
};

//If the session variable is not true, exit to exit page.
if(!$_SESSION['loggedin'])
{
  // close the database connection
  unset($db);
  header("Location: login.html");
  exit;
};

?>

如果没有遇到错误,
$db->query
将返回资源。而不是查询的结果。因此,由于查询执行得很好,所以得到的资源句柄将始终大于0。这就是为什么看起来每个人都成功登录的原因


您需要获取查询结果并检查COUNT(*)的值是否大于零(或等于1)。

$db->query
如果没有遇到错误,将返回资源。而不是查询的结果。因此,由于查询执行得很好,所以得到的资源句柄将始终大于0。这就是为什么看起来每个人都成功登录的原因


您需要获得查询结果并检查COUNT(*)的值是否大于零(或等于1)。

退出();在header()后面停止进一步执行。放置一个exit();在header()后面停止进一步的执行。我认为执行检查
$result>0
就足够了。已经测试过该查询,并且知道它输出1表示正确的值,输出0表示列中不存在的值。我认为执行检查
$result>0
就足够了。已经测试了查询,并且知道它输出1表示正确的值,输出0表示列中不存在的值。