PHPログインスクリプト(下記)に問題があります。誰かが存在しないユーザー名を入力した場合は nouser.php にリダイレクトし、間違ったパスワード (ただし有効なユーザー名) が入力された場合は wrongpass.php にリダイレクトします。以下のコードはほぼ動作します。間違ったパスワード セクション全体をコメント アウトすると、nouser セクションは正常に機能し、nouser ページが表示されますが、間違ったパスワード セクションをそのままにしておくと、nouser と間違ったパスワードの両方の状況で wrongpass.php ページが表示されます。有効なユーザーを入力してもパスワードが間違っていると、間違ったパスワードが取得されます (正しい動作)。簡単に言えば、この名前のnouserがあり、wrongpass.phpページではない場合、nouser.phpにリダイレクトされるようにするにはどうすればよいですか..
<?php
$username = $_POST['username'];
$password = $_POST['password'];
//connect to the database here
require_once 'includes/login.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());
mysql_select_db($db_database, $db_server)
or die("Unable to select database: " . mysql_error());
$username = mysql_real_escape_string($username);
$query = "SELECT password, salt
FROM users
WHERE username = '$username';";
$result = mysql_query($query);
//wrong user section
if(mysql_num_rows($result) < 1) //no such user exists
{
header('Location: nouser.php');
}
//wrong password section
$userData = mysql_fetch_array($result, MYSQL_ASSOC);
$hash = hash('sha256', $userData['salt'] . hash('sha256', $password) );
if($hash != $userData['password']) //incorrect password
{
header('Location: wrongpass.php');
}
//login successful
?>