PHP 自定义错误消息显示不正确


php custom error message shown incorrectly

我正在使用文件而不是数据库为登录功能进行 PHP 分配.txt但我在这里遇到了某种问题。 据说"无效的电子邮件或密码"要在不存在的详细信息键入后显示,但是当页面加载时,默认情况下显示消息,下面是我的代码

<?php
$lines= file("customers.txt");
$matchFound=false;
$errmsg = 'Invalid email or password';
for($i=0;$i<count($lines);$i++)
{
    if ($i!=0)
    {
        $line=trim($lines[$i]); 
        $cells=explode("'t",$line);
        $_SESSION['email'] = isset($_POST['email'])? $_POST['email'] : null;
        $_SESSION['password'] = isset($_POST['password']) ? $_POST['password'] : null;
        if ($_SESSION['email']==$cells[2] && $_SESSION['password']==$cells[3])
        {
            $matchFound=true;
            break;
        }
    }
}
if ($matchFound == true)
{
    header('Location: login2.php');
}
else 
{
    echo $errmsg;
}
?>

这是因为您没有检查用户是否正确提交了表单输入。默认情况下FALSE $matchFound的值,运行脚本时将始终显示错误消息。

为表单提交按钮指定name属性,然后添加if块以确保表单已正确提交:

if (isset( $_POST['submitButton'] )) {
    # code...
}

这样,如果未收到用户输入,则不会运行if块中的代码,并且可以避免每次加载页面时都显示错误。

此外,您缺少脚本顶部的 session_start() 语句。如果您希望会话正常工作,这是必需的。

尝试:

if ($matchFound == true)
{
    header('Location: login2.php');
}
else if(isset($_POST['email']))
{
    echo $errmsg;
}

您还需要session_start才能使用 $_SESSION 数组