当用户不正确登录时,为什么没有显示错误


Why errors are not displaying when user logs in incorrectly

我有以下代码:

session_start ();
include 'core/init.php';
$username = '';
$password = '';
$dbusername = '';
$dbpassword = '';
if (isset($_POST['Email']) && isset($_POST['Password']))
{
    $username = $_POST['Email'];
    $password = md5($_POST['Password']);
    $query = mysql_query("SELECT * FROM member WHERE Email ='$username' AND Password='$password'");
    $numrow = mysql_num_rows ($query);
    // user login
    if ($numrow!=0)
    {
        while ($row = mysql_fetch_assoc($query))
        {
            $dbusername = $row['Email'];
            $dbpassword = $row['Password'];
        }
        //Check to see if they match
        if ($username==$dbusername&&$password==$dbpassword)
        {
            $_SESSION ['Email']=$username;
            header('Location: member.php?username='.$username);
        }
    }
    else 
    {
        // admin login
        $query2 = mysql_query("SELECT * FROM admin WHERE Email ='$username' AND Password ='$password'");
        $numrow2 = mysql_num_rows ($query2);
        if ($numrow2!=0)
        {
            while ($row = mysql_fetch_assoc($query2))
            {
                $dbusername = $row['Email'];
                $dbpassword = $row['Password'];
            }
            //Check to see if they match
            if ($username==$dbusername&&$password==$dbpassword)
            {
                $_SESSION ['Email']=$username;
                header("Location: admin.php");
            }else{
                if (empty ($username) === true|| empty($password) === true) {
                    echo "Please enter a username and password";
                } else if ($username!=$dbusername){
                    echo "That user does not exist! Have you registered?";
                } else if ($username=$dbusername&&$password!=$dbpassword) {
                    echo "Incorrect password";
                }
            }
        }
    }
}

但是如果用户登录不正确,没有任何错误信息显示,只是一个空白页面,我认为这是我的花括号,但无论我改变多少次,我要么让它变得更糟,要么什么都没有。谁能告诉我我做错了什么吗?

查看:

if (empty ($username) === true|| empty($password) === true) {
                echo "Please enter a username and password";
                    } else if ($username!=$dbusername){
                        echo "That user does not exist! Have you registered?";
                    } else if ($username=$dbusername&&$password!=$dbpassword) {
                            echo "Incorrect password";
                    }
            }

包含登录错误的部分位于" admin login "部分,因此当非admin用户登录失败时不会看到任何错误。

select语句已经确保提供的用户名和密码与数据库中的匹配。在PHP中不需要进行第二次比较。您的代码可以如下所示:

if (isset($_POST['Email']) && isset($_POST['Password']))
{
    $username = $_POST['Email'];
    $password = md5($_POST['Password']);
    $query = mysql_query("SELECT * FROM member WHERE Email ='$username' AND Password='$password'");
    if(mysql_num_rows($query) == 1)
    {
        $_SESSION['Email'] = $username;
        header('location: member.php?username='.$username);
    }
    else 
    {
        // try admin login
        $query2 = mysql_query("SELECT * FROM admin WHERE Email ='$username' AND Password ='$password'");
        if(mysql_num_rows($query2) == 1)
        {
            $_SESSION['Email'] = $username;
            header("location: admin.php");
        }
        else
        {
            echo "Failed Login Attempt";
        }
    }
}

因为你的查询只返回用户名和密码匹配的记录,所以你永远不会得到用户名匹配但密码不匹配的结果,所以你在admin登录结束时做的条件检查将永远不会发生。

作为旁注,通知用户用户名是正确的,但密码是错误的,或者反之亦然,这将是糟糕的形式。这是一个安全问题,可能使恶意用户更容易获得访问权限。但这不是重点,所以请将此建议作为个人建议,而不是针对您的问题。

$query = mysql_query("SELECT * FROM member WHERE Email ='$username' AND Password='$password'");
    if(mysql_num_rows($query) == 0){
     echo 'You have entered wrong username/password'; }else {
      // you can continue with your query below.