
本文详解如何在 php 表单处理逻辑中正确添加 header("location: ...") 重定向,避免输出冲突、确保跳转生效,并提供安全、可维护的实践方案。
本文详解如何在 php 表单处理逻辑中正确添加 header("location: ...") 重定向,避免输出冲突、确保跳转生效,并提供安全、可维护的实践方案。
在 PHP Web 开发中,表单提交后跳转至不同结果页面(如成功页 success.php 或失败页 failed.php)是常见需求。但需特别注意:header() 函数必须在任何实际输出(包括 HTML、空格、换行)发送到浏览器前调用,否则会触发 “Headers already sent” 错误。
上述代码中直接使用 echo 输出提示信息,已向客户端发送了 HTTP 响应体,此时再调用 header() 将失效。正确的做法是完全避免提前输出,改用纯重定向逻辑。以下是推荐写法:
<?php
// (A) PROCESS ORDER FORM
if (isset($_POST["name"])) {
require "process.php";
if ($result === "") {
// 成功:重定向至 success.php
header("Location: success.php");
} else {
// 失败:重定向至 failed.php,并可传递错误信息(见下文说明)
header("Location: failed.php?error=" . urlencode($result));
}
exit; // ✅ 关键:终止脚本执行,防止后续代码意外输出
}
?>✅ 关键要点说明:
- exit 或 die() 必须紧跟 header() 后调用 —— 否则脚本继续运行,可能导致重复重定向或意外输出;
- 禁止在 header() 前有任何输出(包括 echo、print、HTML 标签、甚至文件开头的 BOM 或空行);
- 若需向目标页传递状态信息(如错误详情),建议通过 URL 参数(如 ?error=...)或 Session 存储,而非依赖 echo;
- 更健壮的做法是统一使用 Session 保存消息,例如:
$_SESSION['flash_message'] = $result === "" ? "Order received!" : "Submission failed: $result"; header("Location: result.php"); exit;然后在 result.php 中读取并显示,兼顾安全性与用户体验。
立即学习“PHP免费学习笔记(深入)”;
⚠️ 常见错误规避:
- 不要混用 echo 和 header() 在同一分支;
- 检查 process.php 是否含输出(如调试 echo、var_dump);
- 使用 UTF-8 无 BOM 编码保存所有 PHP 文件。
掌握这一模式,即可安全、可靠地实现表单处理后的条件跳转,为用户构建清晰的操作反馈流程。








