
php表单未设置`action`属性时,默认提交到当前url,导致`$_post['submit']`始终为空,条件判断失效,页面仅刷新而无法执行重定向。
在初学PHP表单处理时,一个常见却容易被忽视的错误是:遗漏<form>标签的action属性。你提供的代码中,<form method="POST">未指定action,浏览器会默认将数据提交回当前页面(即自身URL)。而你的PHP逻辑依赖if (isset($_POST['submit']))来触发跳转——但按钮本身没有name="submit",且表单未明确指向处理脚本,因此该条件永远为false,header()重定向根本不会执行,仅表现为页面刷新。
✅ 正确做法:补全表单属性 + 修正PHP逻辑
首先,为表单添加action并确保提交按钮具备可检测的name属性:
<form method="POST" action="ari.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 属性,使其在 $_POST 中可见 -->
<button type="submit" name="submit" value="send" class="btn transparent btn-block" style="color: white;">
Submit
</button>
</form>然后,在 ari.php(或同页)中完善服务端逻辑:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) {
$password = $_POST['password'] ?? '';
if ($password === 'password') {
header('Location: ari.html');
exit(); // 必须调用 exit() 阻止后续代码执行
} else {
echo '<p style="color:red;">Incorrect password.</p>';
}
}
?>⚠️ 注意事项:
- header()前不能有任何输出(包括空格、BOM、echo),否则报“Headers already sent”错误;
- 推荐使用$_SERVER['REQUEST_METHOD']双重校验,比仅依赖isset($_POST['submit'])更健壮;
- 生产环境中切勿硬编码密码,应使用password_hash()/password_verify()配合数据库验证;
- 若逻辑写在同一文件(如index.php),action可设为""或".",但仍需确保无前置输出。
通过以上调整,表单将正确提交至目标脚本,PHP条件生效,成功重定向至ari.html。
立即学习“PHP免费学习笔记(深入)”;











