正在从HTML表单中删除Get

时间:2017-07-28 17:43:07

标签: html forms get

我在页面上有一个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预览”,他们会得到与网页相同的报告;但是在处理结束时没有收到“format”参数。

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

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

编辑以添加: 如果我将操作移动到<form>标记,则可以正常运行。当然,这阻止了我有两个按钮做两件事,所以它不能解决问题,但它是可能发生的事情的线索。这项工作:

<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>

2 个答案:

答案 0 :(得分:1)

我要看的第一个地方是验证数据确实是作为POST请求发送的。如果浏览器认为表单应该使用GET请求,那么很高兴删除并替换硬编码的查询字符串。

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

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

答案 1 :(得分:1)

已解决 - 在提交<input>中,“操作”属性无效。我应该使用“形成”:

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

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