2009-04-09 6 views
34

私はHTMLでこのような何かを行う場合、私は期待することができ、よく支え、共通の動作があります:<form>のアクションフィールドにパラメータがあるとどうなりますか?

<form method="get" action="/somePage.html?param1=foo&param2=foo"> 
    <input name="param2"></input> 
    <input name="param3"></input> 
</form> 

は、この種のもののように思えるが、本質的にばかげているが、私はそれがここで使用さ見てきましたし、そこに私は期待された行動が地球上で何がすべきかを考えていました。ブラウザは "& param2 = whatever & param3 =何でも"をタックするのに十分スマートですか、それとも2番目の疑問符を投げますか?または何?実際にこれが正しい方法である場合がありますか?

+0

あなたは[1] [1] [1は別のstackoverflowの答えである]、Apacheを使用して回避策を必要としている場合は:http://stackoverflow.com/questions/1116019/submitting-a- get-form-with-query-string-params-and-hidden-params-disappear /#16415773 – wanis

答えて

52

メソッド属性がGETに設定されている場合、ブラウザはフォーム引数値を作成する前にアクション属性からクエリ文字列パラメータを削除します。

は、だからあなたの例では、提出上のサーバへのリクエストは次のようになります。メソッドは「GET」のとき/somePage.html?param2=value&param3=value

のでノー、あなたの例のように、これを実行する理由はありません。

+2

、およびメソッド属性がPOSTに設定されている場合、両方が保持されます。サーバーへの要求は、クエリ文字列でparam1 = foo&param2 = foo、投稿フォーム値としてparam2(別の値)とparam3を持ちます。 – thomasrutter

+0

@thomasrutterかなり正しい!私はそれがこの議論の範囲外であると思う。興味深い部分は明らかな衝突です。 –

+0

@Rex - GETとPOSTの動作が異なることは魅力的だと思います。期待していなかったこと。なぜ論理的な理由がありますか? –

17

わかりませんが、私は隠れた入力フィールドにこれらの変数を配置する方が良いと思います。この方法では、投稿方法がPOSTかGETのどちらかであるかどうかは関係ありません。

<form method="get" action="/somePage.html"> 
    <input name="param2"></input> 
    <input name="param3"></input> 
    <input type="hidden" name="param1" value="foo" /> 
    <input type="hidden" name="param2" value="foo" /> 
</form> 
4

フォームを投稿する前にスクリプトで「POST」にフォームのメソッド属性を変更することができ、そのアクションでクエリ文字列の使用があるかもしれません。しかし、それはほとんどの場合、最良の解決策ではないようです。

3

質問がすべて答えられましたが、答えは「はい」です。 POSTの場合は許可されますが、うまくいかない場合があります。私は、ポストデータまたはクエリーストリングのみを許可するWebサーバーを見てきました。したがって、信頼できません。

関連する問題