2017-07-28 60 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){} –