如何在表单提交后同页显示提示消息(含错误与成功反馈)

风枫姑娘_4829

风枫姑娘_4829

2026-07-28

791人浏览

原创

如何在表单提交后同页显示提示消息(含错误与成功反馈)

本文介绍使用 PHP Session 实现表单提交后跳转刷新页面的同时,安全、可靠地显示错误或提示消息,避免重复提交,并解决因 header("Location: ...") 导致消息丢失的问题。

本文介绍使用 php session 实现表单提交后跳转刷新页面的同时,安全、可靠地显示错误或提示消息,避免重复提交,并解决因 `header("location: ...")` 导致消息丢失的问题。

在 Web 开发中,常见需求是:用户提交登录/注册等表单后,页面跳转回原页(如 index.php)并显示相应提示(如“用户名不能为空”或“登录失败”)。但若直接用 header("Location: index.php") 跳转,当前脚本中的局部变量(如 $error1)会丢失,导致消息无法显示——这正是你遇到的核心问题。

根本解法是将提示消息暂存于 Session,利用其跨请求生命周期的特性,在重定向后的目标页面中读取并立即销毁,确保消息仅显示一次(即 Flash Message 模式)。

✅ 正确实现步骤

  1. 开启 Session(已在代码顶部调用 session_start(),务必确保它出现在任何输出之前);

  2. 验证失败时,将错误信息写入 $_SESSION,而非本地变量:

    Js登陆注册表单设计代码
    Js登陆注册表单设计代码

    分享一款js左右晃动切换登陆注册表单设计代码,简洁利落的ui和滑动切换设计适用于任何网站的登陆注册。

    下载
    if (empty($_POST['username'])) {
        $_SESSION['error'] = "Please enter username.";
        header("Location: index.php");
        exit; // 防止后续代码执行,关键!
    }
  3. 在目标页面(如 index.php)顶部检查并显示 Session 消息:

    <?php if (isset($_SESSION['error'])): ?><div class="alert alert-danger"><?php echo htmlspecialchars($_SESSION['error']); ?></div>
        <?php unset($_SESSION['error']); ?><?php endif; ?>

    ⚠️ 注意:unset() 必须紧跟在显示之后,否则刷新页面会重复显示;同时使用 htmlspecialchars() 防止 XSS 攻击。

  4. 补充安全与健壮性细节:

    • 所有 header() 调用后必须加 exit 或 die,避免逻辑继续执行;
    • 使用 $_POST['username'] 替代未定义的 $username(原代码中 $username 未初始化,存在 Notice 风险);
    • SQL 查询应改用预处理语句防范注入(mysqli_real_escape_string 已过时且不彻底);
    • 登录成功后设置 Session 前无需再次 session_start()(已启动);
    • $id 变量未定义,应从查询结果中获取(如 mysqli_fetch_assoc($res))。

✨ 完整优化示例(关键片段)

<?php session_start();
include("includes/config.php");

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
    $username = $_POST['username'] ?? '';
    $password = $_POST['password'] ?? '';

    if (empty($username)) {
        $_SESSION['error'] = "Please enter username.";
        header("Location: index.php");
        exit;
    }

    // ✅ 推荐:使用预处理防止 SQL 注入
    $stmt = $con->prepare("SELECT id, username FROM admin_user WHERE username = ? AND password = ?");
    $stmt->bind_param("ss", $username, $password);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows > 0) {
        $user = $result->fetch_assoc();
        $_SESSION['username'] = $user['username'];
        $_SESSION['id'] = $user['id'];
        $_SESSION['admin']['status'] = true;
        header("Location: dashboard.php");
        exit;
    } else {
        $_SESSION['error'] = "Invalid username or password.";
        header("Location: index.php");
        exit;
    }
}
?>

<!-- 显示消息(放在表单上方) -->
<?php if (isset($_SESSION['error'])): ?><div class="alert alert-danger">
        <?php echo htmlspecialchars($_SESSION['error']); ?>
</div>
    <?php unset($_SESSION['error']); ?><?php endif; ?><!-- 表单 HTML(保持不变) -->

? 总结

  • 不要依赖局部变量传递消息:重定向后作用域失效;
  • Session 是同页提示的标准方案:轻量、可靠、符合 HTTP 语义;
  • 始终 exit 在 header() 后:防止逻辑泄露与安全风险;
  • 持续强化安全性:输入校验、输出转义、SQL 预处理缺一不可。

该模式不仅适用于登录,也广泛用于注册、评论、设置更新等所有需“提交 → 跳转 → 提示”的场景。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

表单提交

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
ThinkPHP表单验证与数据安全处理实战
ThinkPHP表单验证与数据安全处理实战

本专题聚焦 ThinkPHP 在表单处理中的验证与安全机制,系统讲解验证器使用、自定义规则、场景验证以及错误提示处理。内容涵盖 XSS 防护、SQL 注入防御、数据过滤与输入校验等关键安全措施。通过实际案例,帮助开发者构建安全可靠的数据处理流程。

2026.03.30

201

20

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

2023.06.30

11119

10

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.23

966

5

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

744

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1826

14

session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

2023.10.17

580

4

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

2023.10.18

876

5

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

2025.08.19

1826

14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP与Ajax极速入门
PHP与Ajax极速入门

共8课时 | 11.7万人学习