You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP登录表单错误提示消息无法显示问题求助

登录表单错误提示无法显示的排查与解决

我在开发PHP+HTML登录表单时遇到问题:用户输入错误凭证时,对应的提示消息无法正常显示。相关代码如下:

处理登录的PHP函数:

function login_user(){
    if(isset($_POST['submit'])){
        $username = escape_string($_POST['username']);
        $password = escape_string($_POST['password']);
    
        $query = query("SELECT * FROM users WHERE username = '{$username}' AND password = '{$password }' ");
        confirm($query);
    
        if(mysqli_num_rows($query) == 0) {
            set_message("Your Password or Username are wrong");
            redirect("login.php");
        } else {
            $_SESSION['username'] = $username;
            redirect("admin");
        }
    }
}

function display_message() {
    if(isset($_SESSION['message'])) {
        echo $_SESSION['message'];
        unset($_SESSION['message']);
    }
}

function set_message($msg){
    if(!empty($msg)) {
        $_SESSION['message'] = $msg;
    } else {
        $msg = "";
    }
}

在login.php中显示消息的代码:

<h2 class="text-center bg-warning"><?php display_message(); ?></h2>

我尝试过调整消息显示位置、注释unset($_SESSION['message']);,但都没有效果。


问题排查与解决步骤

  1. 必须启动Session
    所有使用$_SESSION的PHP文件(包括处理登录的脚本和login.php),必须在任何输出(HTML标签、空格等)之前调用session_start(),否则$_SESSION变量无法正常读写。

在所有相关PHP文件最顶部添加:

session_start();
  1. 修复Redirect函数的实现
    如果redirect是自定义函数,需确保跳转后立即终止脚本执行,避免后续代码干扰session状态:
function redirect($location) {
    header("Location: " . $location);
    exit(); // 关键:终止脚本,防止后续代码执行
}

没有exit()的话,脚本可能继续运行,导致session消息未被正确保存就完成跳转。

  1. 验证函数调用顺序
    确保login_user()在login.php页面被调用,比如在页面顶部添加:
login_user();

这样表单提交后,函数会先执行并设置session消息,再跳转回login.php,此时display_message()才能读取到对应的消息。

  1. 优化Set_message函数(可选)
    原函数在传入空消息时仅修改局部变量,可优化为直接清除session中的消息:
function set_message($msg){
    if(!empty($msg)) {
        $_SESSION['message'] = $msg;
    } else {
        unset($_SESSION['message']); // 空消息时清除session值
    }
}

调试建议

  • 在调用redirect("login.php")前添加var_dump($_SESSION['message']);,确认消息已被正确写入session。
  • 在login.php中display_message()调用前添加var_dump($_SESSION);,检查session中是否存在message键。

内容的提问来源于stack exchange,提问作者therac25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:07:42