2012-01-27 80 views
8

したがって、ページの現在のクエリ文字列を保持している間に、自分自身にページを送信しようとしています。?key = valを使用したフォームの送信アクション属性にすでにあるクエリ文字列は、そのクエリ文字列を無視します。

したがって、ページはsb.local/sb/cat.php?brandcode=JM&t=cat_itemsです。クエリ文字列を引き出し、html形式に戻してパラメータを保存します。これは、結果の形式である:私はAetrex(値AX)のドロップダウンを選択してフォームを送信すると

<form id="brand-select" method="get" action="?brandcode=JM&t=cat_items" name="brand-select"> 
Brand: 
<select id="brandcode" style="width:207px" tabindex="3" name="brandcode" required=""> 
<option value=""></option> 
<option class="brand-option" value="AX" data-brandid="110"> Aetrex </option> 
<option class="brand-option" value="AL" data-brandid="12"> Alden </option> 
<option class="brand-option" value="ETC" data-brandid="11"> Etc </option> 
</select> 
<input type="submit" value="go"> 
</form> 

、しかし、それはのURLに行く:

つまり

sb.local/sb/cat.php?brandcode=AX 、それはカットその行動にある "t = cat_items"を出してください。それはまた、 "brandcode = JM"を切り捨てますが、重複しているのでほとんど期待しています。

これは私が期待していたものではなく、アクション属性にクエリ文字列があると、そのクエリ文字列にフォーム値を追加することが予想されます(例:sb.local/sb/cat.php?brandcode=JM&t=cat_items&brandcode=AX。形をしている要素

フォームアクションは、クエリパラメータを格納するためにのみ、より基本的なURL情報を使用できない属性です

編集:。?私は、すべてのパラメータを解析することによってこの問題を回避することができていること注意変更を許可したいパラメータを除いて、各パラメータを手動で独自の非表示フィールドに設定すると、私はもっと単純な方法があると思っていただけです。
矛盾しないクエリ文字列でテストしましたが、競合が発生していなくても(Firefoxで)置き換えられました。そのため、フォームを取得するアクション属性ではクエリ文字列が役に立たないようです。あるいは私は何かを逃している。

+0

[クエリ文字列paramsと隠れたパラメータを含むGETフォームを送信する]の重複が可能です。(http://stackoverflow.com/questions/1116019/submitting-a-get-form-with-query-string-params-and -hidden-params-disappear) – isherwood

答えて

9

私はこれが古い質問であることを知っていますが、解決策は実際には非常にシンプルです(そしてきれいです!)。

あなたがしなければならないことは、入力フィールドが隠されたクエリ文字列をname="key"value="value"の形式で送信することだけです。 ?完全にあなたactionからクエリ文字列を削除

<input type="hidden" name="brandcode" value="JM" /> 
<input type="hidden" name="t" value="cat_items" /> 

brandcode = JM &トン= cat_itemsに "翻訳" でしょう。

+0

質問の冒頭で言及したように、私は手動解決策を認識していますが、すべてのURLパラメータとその値を解析し、変更する特定のものを除外する必要があります。それらを隠れた入力に入れるための形でそれらをループします。 – Kzqai

+0

ええ、これは今日、私が本当に安定したアクセスを望んでいた場合、それはかなりurl slugs経由でこれを行う方法です。 – Kzqai

+0

実際、これは生成するのが難しくありません。 $ _GET(PHPの場合)またはRequest.QueryString(VBScript/VBの場合)を繰り返してください。すべてのキーと値を隠し入力として出力します。 –

1

フォームの送信に「GET」メソッドの代わりに「POST」メソッドを使用できます(メソッドが問題でない場合)。

+0

Hmmm、注意してください。この場合、私は最大限の透明性を得るためにgetを使用しようとしていましたが(すべての変更は対応するURLの変更を取得します)、おそらくこの切断は、フォームを取得することによってフォームを使用する通常の方法を乱用しているためです。 – Kzqai

関連する問題