2017-07-28 6 views
0

私はページにHTMLフォームを持っています。メソッドはPOSTですが、ユーザーがクリックするボタンに応じてURL文字列にGETパラメータを手動で追加しています。しかし、フォームが提出されると、GETはURLから取り除かれています。Getは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> 

基本的に、彼らは「GO」をクリックすると、彼らはPDFを取得する必要があります、そして、彼らは「ウェブプレビュー」をクリックすると、彼らはWebページと同じレポートを取得します。 "format"パラメータは物事の処理終了時に受け取られません。追加する

(。私は複数のブラウザでそれをも試してみた)

編集:私は、POSTデータが処理終了に受信されていることを確認することができます。 GETだけがありません。

このアクションを<form>タグに移動すると、動作します。もちろん、2つのボタンを2つ持つことができないので、問題は解決しませんが、何が起きているのかという手がかりになります。これは動作します:

<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

私の最初の推測はサーバー側でもあります。 2番目の推測はブラウザの更新です。 IISボックスが自動更新するかどうか知っていますか? – madscientist159

+0

同僚はIE 8でテストしました(そして、私はFirefoxとChromeでテストしました)ので、それはブラウザではないと確信しています。サーバーは時折更新されますが、頻繁に更新されることはありません。しかし、私はまた、この問題がいつ始まったのか本当に分かっていません。...// –

答えて

0

解決済み - <input>のサブミットでは、「アクション」属性は無効です。

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

どこかの道に沿って、さまざまなWebブラウザへの更新を停止している必要があります受け入れて「アクション」:私は「formaction」を使用している必要があります。

0

まず、データが実際にPOST要求として送信されていることを確認することです。もし何らかの理由で、フォームがGETリクエストを使用しているとブラウザが判断した場合、ハードコーディングされたクエリー文字列を削除して置き換えることができます。

私が示唆していることは、ブラウザが実際に送信していることを明確にするために、reports.phpで$ _POSTと$ _GETにvar_dump()を実行することです。出力にはいくつかの手がかりがあるかもしれません。

本当に$ _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){} –

関連する問題