
php 表单未设置 `action` 属性时,默认提交到当前 url,导致 `$_post['submit']` 始终未被触发,页面仅刷新而无法执行重定向逻辑。
在你提供的代码中,表单缺少关键的 action 属性,且 PHP 判断条件依赖于 $_POST['submit'] ——但 HTML 中的
✅ 正确做法需同时满足两个条件:
- 为表单指定 action(指向当前脚本或处理脚本);
- 确保 $_POST 中存在可检测的键名(如通过
以下是修正后的完整示例(假设所有代码位于 login.php 中):
<!-- login.php -->
<form method="POST" action="login.php">
<div class="form-outline form-white mb-4">
<input type="password" name="password" class="form-control" required />
<label class="form-label" for="form">Pass</label>
</div>
<!-- 关键:添加 name 属性,使 submit 按钮数据可被 $_POST 接收 -->
<button type="submit" name="submit" value="send" class="btn transparent btn-block" style="color: white;">
Submit
</button>
</form><?php
if (isset($_POST['submit'])) {
$password = $_POST['password'] ?? '';
if ($password === 'password') {
header('Location: ari.html');
exit(); // 必须调用 exit() 防止后续代码执行
} else {
echo '<p style="color:red;">Incorrect.</p>';
}
}
?>⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- header() 重定向前不能有任何输出(包括空格、echo、HTML 或 BOM 字符),否则会报 “Headers already sent” 错误;建议将 PHP 处理逻辑置于 HTML 之前,或使用输出缓冲(ob_start());
- 密码明文比对('password')仅适用于学习演示,生产环境必须使用 password_hash() + password_verify() 并配合数据库存储;
- type="Submit" 应为小写 type="submit"(HTML5 标准写法,虽大小写不敏感但建议统一);
- 使用 exit() 或 die() 在 header() 后强制终止脚本,避免意外输出干扰重定向。
通过以上调整,表单即可正确提交、验证并通过 header() 跳转至 ari.html,彻底解决“点击即刷新”的问题。











