网页表单提交按钮异常:未点击却自动提示用户名/密码无效
问题修复方案
你的问题出在浏览器的重复请求机制:当你提交过一次表单后,刷新页面时浏览器会自动重复上次的POST请求,此时$_POST['submit']存在但用户名密码为空,所以触发了错误提示输出。要实现「仅点击提交后才验证提示」,可以用Post/Redirect/Get (PRG) 模式解决,具体步骤如下:
修复后的完整代码
<?php session_start(); $message = ''; if (isset($_SESSION['message'])) { $message = $_SESSION['message']; unset($_SESSION['message']); } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) { $username = $_POST['username'] ?? ''; $password = $_POST['password'] ?? ''; if ($username === 'username' && $password === 'password') { $_SESSION['message'] = "berhasil"; } else { $_SESSION['message'] = "Invalid Username / Password"; } // 重定向到当前页面,转为GET请求 header("Location: " . $_SERVER['PHP_SELF']); exit; } ?> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Web</title> </head> <body> <div id="main"> <!-- 显示验证提示 --> <?php if ($message): ?> <p><?php echo $message; ?></p> <?php endif; ?> <form method="POST"> Username<input type="text" name="username"> Password<input type="password" name="password"> <input type="Submit" name="submit" id="sub"> </form> </div> </body> </html>
关键改动说明
- 开启
session存储验证提示信息,避免刷新时重复触发POST逻辑 - 用
$_SERVER['REQUEST_METHOD'] === 'POST'双重确认请求类型,确保只有主动提交表单时才处理验证 - 验证完成后通过
header()重定向到当前页面,将POST请求转为GET请求,此时刷新页面只会发送GET请求,不会触发验证逻辑 - 在HTML中添加提示显示区域,读取session内容后立即清空session,避免重复显示提示
内容的提问来源于stack exchange,提问作者Tirtaodd997
相关产品推荐
相关产品推荐

