2017-07-28 91 views
0

我在页面上有一个HTML表单。该方法是POST,但我手动添加GET参数到URL字符串取决于用户点击哪个按钮。但是当表单被提交时,GET被剥离掉了URL。获取被剥离的HTML表格

我真的很困惑。这种方法过去曾多次使用过,并且这个实际的形式本身用于正常工作。突然间,完全相同的(以前工作的)代码不起作用。

我正在使用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> 

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

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

编辑补充:我可以证实,正在对加工端接收到的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> 
+0

想知道是否有一些奇怪的服务器设置可以做到这一点 - 特别是因为代码没有改变时它的工作。运行IIS 7 –

+0

我的第一个猜测是服务器端,第二次猜测会是浏览器更新。你知道IIS框是否自动更新? – madscientist159

+0

一位同事在IE 8中测试了它(我在Firefox和Chrome中测试过),所以很确定它不是浏览器。服务器会不时更新,但并不常见。但我也不知道这个问题何时开始/嗯... –

回答

0

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

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

某处前进的道路上的更新,各种Web浏览器都必须停止接受“动作”。

0

我看第一个地方是验证数据确实是作为POST请求发送。如果出于任何原因,浏览器认为表单应该使用GET请求,它将非常高兴地删除并替换硬编码的查询字符串。

我会建议在$ _POST上做一个var_dump(),在reports.php中做$ _GET来获得浏览器实际传输的确切概念。输出中可能有一些线索。

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

+0

POST数据确实正在通过 –

+0

var_dump POST:array(3){[“report”] => string(3)“abc”[“pd_user”] => string(3)“all”[“pd_period”] => string(3)“139”} var_dump GET:array(0){} –