0

Web ベースの MIS のログイン認証を作成しようとしています。以下は私が使用するコードです。ただし、ユーザー名「admin」とパスワード「12345」を指定すると、そのレコードがデータテーブルに配置されていても、これはログインしません。

これは、テーブルの SQL コードです。

CREATE TABLE accounts (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password CHAR(32) NOT NULL,
last_login DATETIME NOT NULL
);

入力するとecho $stmt->num_rows;0 が返されるので、データベースに一致するものが見つからなかったことを意味すると思います。誰でも私を助けることができますか?

これが私のコードです:

<?php

// Sanitize incoming username and password
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);

// Connect to the MySQL server
$db = new mysqli("localhost", "root", "qwerty", "MIS");

// Determine whether an account exists matching this username and password
$stmt = $db->prepare("SELECT id FROM accounts WHERE username = ? and password = md5(?)");

// Bind the input parameters to the prepared statement
$stmt->bind_param('ss', $username, $password); 

// Execute the query
$stmt->execute();

// Store the result so we can determine how many rows have been returned
$stmt->store_result();


if ($stmt->num_rows == 1) {

// Bind the returned user ID to the $id variable
$stmt->bind_result($id); 
$stmt->fetch();

// Update the account's last_login column
$stmt = $db->prepare("UPDATE accounts SET last_login = NOW() WHERE id = ?");
$stmt->bind_param('d', $id); 
$stmt->execute();

  session_start();

$_SESSION['username'] = $username;

// Redirect the user to the home page
header('Location: http://localhost/');
}


?>
4

1 に答える 1

0

あなたのコードは問題ないようです

新しいレコードを入力するときは、プレーン パスワード文字列を入力しないように注意してください。コードは元の文字列ではなくハッシュ値を検索するため、パスワードの md5 ハッシュ値を入力する必要があります。

于 2013-08-14T04:47:34.360 に答える