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

PHP/HTML表单:加载时从数据库填充输入框,提交时避免AnswerArea出现在URL

解决方案:POST处理数据 + 重定向到GET页面

你的需求完全可以通过「POST提交敏感/长内容 + 处理完成后重定向到带指定参数的URL」来实现,这样既避免了AnswerArea出现在地址栏,也解决了长度限制问题,同时URL里只保留你需要的Q、P、ref参数。具体步骤如下:

1. 修改HTML表单,改用POST方法

把表单的method设置为POST,action暂时指向当前页面(后续处理完再跳转到mypage.php):

<form method="POST" action="">
  <input type="text" name="AnswerArea" ID="AnswerArea" value="' . $this_answer . '" />
  <!-- 保留这三个hidden字段,后续重定向时会用到 -->
  <input type="hidden" name="Q" value="' . $NextQ . '" />
  <input type="hidden" name="P" value="' . $quest . '" />
  <input type="hidden" name="ref" value="' . $ref . '" /><br><br>
  <input class="button" name="submit" type="submit" value="Next" />
</form>

2. 调整PHP代码:先处理POST数据,再重定向

把PHP代码放在页面最顶部(确保在输出任何HTML之前执行),先接收POST过来的AnswerArea写入数据库,再构造包含目标参数的URL进行重定向:

<?php
// 仅处理POST提交的请求
if ($AStyle != 'None' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    // 检查AnswerArea是否存在且不为空
    if (isset($_POST['AnswerArea'])) {
        include 'connection.php';
        $newanswer = $_POST['AnswerArea'];
        $ref = $_POST['ref'];
        $prev = // 请确保$prev变量有正确取值(比如从之前的业务逻辑中获取)
        
        // 重要:改用预处理语句防止SQL注入!禁止直接拼接用户输入到SQL里
        $stmt = $mysqli->prepare('UPDATE answers SET Q? = ? WHERE strRef = ?');
        // 绑定参数:若$prev是数字则用'i',字符串用's',这里假设是字符串
        $stmt->bind_param('sss', $prev, $newanswer, $ref);
        $stmt->execute();
        
        $stmt->close();
        mysqli_close($mysqli);
    }
    
    // 构造重定向URL,只携带Q、P、ref三个参数
    $redirectUrl = 'http://mypage.php?' . http_build_query([
        'Q' => $_POST['Q'],
        'P' => $_POST['P'],
        'ref' => $_POST['ref']
    ]);
    
    // 执行重定向,必须在输出任何内容前调用header
    header("Location: " . $redirectUrl);
    exit; // 终止后续代码执行,避免不必要的输出
}
?>

关键说明

  • POST+重定向的优势:POST提交的AnswerArea不会出现在URL中,完美解决长度限制和隐私问题;重定向后浏览器地址栏只会显示mypage.php?Q=xxx&P=xxx&ref=xxx,完全符合你的需求。
  • 安全提示:我把原代码的SQL拼接改成了预处理语句,这是防止SQL注入的核心手段,直接拼接用户输入会导致严重的安全漏洞,一定要坚持使用参数绑定。
  • 重定向注意事项:header("Location: ...")必须在输出任何HTML标签、空格或echo内容之前调用,所以PHP代码要放在页面最顶部,或者确保之前没有任何输出。

这样调整后,用户点击提交按钮,浏览器会先以POST方式把所有表单数据发送到当前页面,PHP处理完数据库写入后立即跳转到目标页面,最终地址栏里就只有你需要的参数了。

内容的提问来源于stack exchange,提问作者Andy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:22:35