1

それがコードです

<?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;
};

?>

データベーススキーマ:

ユーザー名TEXTNOTNULL PRIMARY KEY UNIQUE、パスワードTEXT

唯一の行数は、Username='admin'およびPassword='admin'です。

ユーザー名とパスワードがデータベースにない場合でも、スクリプトが毎回index.phpにリダイレクトする理由はありますか?

前もって感謝します

4

1 に答える 1

4

$db->queryエラーが発生しなかった場合、リソースを返します。クエリの結果ではありません。したがって、クエリは正常に実行されるため、常に0より大きいリソースハンドルを取得できます。これが、全員が正常にログインしているように見える理由です。

クエリの結果を取得し、COUNT(*)の値がゼロより大きい(または1に等しい)かどうかを確認する必要があります。

于 2012-04-23T18:02:02.450 に答える