我在使用 php 登录脚本时遇到问题(如下)。如果有人输入了不存在的用户名,我想重定向到 nouser.php,如果输入了错误的密码(但输入了有效的用户名),我想重定向到 wrongpass.php。下面的代码几乎可以工作。如果我注释掉整个错误密码部分,则 nouser 部分按预期工作,显示 nouser 页面,但如果我将错误密码部分留在其中,我将得到错误密码页面,用于 nouser 和错误密码情况。如果我输入了一个有效用户但密码错误,那么我会得到错误的密码(正确的行为)。简而言之,如果没有此名称的 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
?>