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']);,但都没有效果。
问题排查与解决步骤
- 必须启动Session
所有使用$_SESSION的PHP文件(包括处理登录的脚本和login.php),必须在任何输出(HTML标签、空格等)之前调用session_start(),否则$_SESSION变量无法正常读写。
在所有相关PHP文件最顶部添加:
session_start();
- 修复Redirect函数的实现
如果redirect是自定义函数,需确保跳转后立即终止脚本执行,避免后续代码干扰session状态:
function redirect($location) { header("Location: " . $location); exit(); // 关键:终止脚本,防止后续代码执行 }
没有exit()的话,脚本可能继续运行,导致session消息未被正确保存就完成跳转。
- 验证函数调用顺序
确保login_user()在login.php页面被调用,比如在页面顶部添加:
login_user();
这样表单提交后,函数会先执行并设置session消息,再跳转回login.php,此时display_message()才能读取到对应的消息。
- 优化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
相关产品推荐
相关产品推荐

