【问题标题】:Get is being stripped off an HTML formGet 被从 HTML 表单中剥离
【发布时间】:2017-07-28 17:43:06
【问题描述】:

我在页面上有一个 HTML 表单。该方法是 POST,但我手动将 GET 参数添加到 URL 字符串,具体取决于用户单击的按钮。但是当提交表单时,GET 会从 URL 中剥离。

我真的对此感到困惑。这种方法在过去曾多次奏效,而这种实际形式 本身曾经也能正常工作。突然,完全相同的(以前工作的)代码不起作用。

我正在使用 Firefox Web Developer 工具查看请求中传递了哪些参数,并且没有 GET 的迹象。

<form method="post" target="_blank">
    <input type="hidden" name="report" value="abc">
    ...a couple Select form fields...
    <input type="submit" action="reports.php?format=PDF" value="Go">
    [<input type="submit" action="reports.php?format=preview" value="Web Preview">]
</form>

基本上,如果他们点击“Go”,他们应该会得到一个 PDF,如果他们点击“Web Preview”,他们会得到与网页相同的报告;但是在处理结束时没有收到“格式”参数。

(我也在多个浏览器中尝试过。)

编辑添加:我可以确认在处理端正在接收 POST 数据。仅缺少 GET。

编辑添加: 如果我将操作移动到&lt;form&gt; 标签,它会起作用。当然,这会阻止我有两个按钮来做两件事,所以它不能解决问题,但它是可能发生的事情的线索。这确实有效:

<form method="post" action="reports.php?format=PDF" target="_blank">
    <input type="hidden" name="report" value="abc">
    ...a couple Select form fields...
    <input type="submit" value="Go">
    <!-- [<input type="submit" action="reports.php?format=preview" value="Web Preview">] -->
</form>

【问题讨论】:

  • 想知道是否有一些奇怪的服务器设置可以做到这一点 - 特别是因为代码从它工作时起没有改变。运行 IIS 7
  • 我的第一个猜测也是服务器端;第二个猜测是浏览器更新。你知道 IIS 框是否自动更新?
  • 一位同事在 IE 8 中对其进行了测试(我在 Firefox 和 Chrome 中进行了测试),因此很确定它不是浏览器。服务器确实会不时更新,但通常并不可怕。但我也不知道这个问题是什么时候开始的/嗯...
  • 新信息添加到问题。它似乎仅在“操作”属性位于“提交”按钮上时才会发生。将其移至 Form 标签即可正常工作。

标签: html forms get


【解决方案1】:

我首先要看的是验证数据确实是作为 POST 请求发送的。如果出于某种原因,浏览器认为表单应该使用 GET 请求,它会很乐意删除并替换硬编码的查询字符串。

我的建议是在reports.php 中对$_POST 和$_GET 执行var_dump(),以明确了解浏览器实际传输的内容。输出中可能有一些线索。

如果 $_GET 数据确实丢失了,我会检查以确认没有人在服务器上设置重写规则以从 PHP 请求中删除查询字符串,甚至是对这个特定页面的请求。据我所知,IIS 通常不会从 POST 请求中删除查询字符串,因为这会违反完善的标准,但总是有可能手动添加规则来完成同样的事情。

【讨论】:

  • POST数据确实在传
  • var_dump POST: array(3) { ["report"]=> string(3) "abc" ["pd_user"]=> string(3) "all" ["pd_period"]= > 字符串(3)“139”} var_dump GET:数组(0){}
【解决方案2】:

已解决 -- 在提交 &lt;input&gt; 中,“操作”属性无效。我应该使用“formaction”:

<input type="submit" formaction="reports.php?format=PDF" value="Go">

在此过程中,各种网络浏览器的更新必须停止接受“操作”。

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 2012-12-05
    • 2012-09-30
    • 1970-01-01
    • 2022-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多