You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网页表单提交按钮异常:未点击却自动提示用户名/密码无效

问题修复方案

你的问题出在浏览器的重复请求机制:当你提交过一次表单后,刷新页面时浏览器会自动重复上次的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:15:19