2011-11-04 26 views
3

注:HTML表單多重選擇使用GET

這有點難以谷歌這一點,因爲「GET」帶來了很多「如何‘得到’與javascript中的表價值」等

問題:

TL; DR版第一

你能使用AM ulti - 從表單的GET方法中選擇並仍檢索每個單獨的值?

擴展解釋

一個搜索目錄我建立包括使用與表單GET方法,使用戶可以看到他們的結果的URL,並直接發送鏈接的要求到另一個客戶的搜索結果等。

其中一個可搜索字段是多選框(具有MULTIPLE屬性的選擇框)。我的後端是用PHP編寫的,我通常通過將名稱設置爲數組變量(name="multiselect[]")來處理多重選擇,並且post變量包含所選選項($_POST["multiselect"] == array())的數組。

在這種情況下的問題是,多選值傳遞給GET字符串是這樣的:

action?multiselect=1&multiselect=2 

所以不管最後一個值是替換變量在第一初始化值得到字符串。 (在上面的例子中,multiselect等於「2」)。

試圖讓一個數組只是使以同樣的方式取代了數組值的名稱,這樣

action?multiselect[]=1&multiselect[]=2 

會導致$_GET["multiselect"] == 2

我原本建議使用複選框,因爲它會允許我們以不同的方式命名元素並檢查每個元素的真/假,但是對於這個特定的多重選擇有大約30個值,並且他們希望它位於可捲動區域中。

+1

爲什麼不添加隱藏的表單元素並將多選值複製到相應的複選框。易於使用jQuery。你顯然有一個「獲得」使用的原因,但記得URLS對他們有一個有限的長度。你不能通過URL本身發送8K的數據。 –

+1

您是否嘗試過使用foreach循環來檢查後置變量或使用$ _GET [「multiselect」]的大小? – scrappedcola

+0

這是一個很好的觀點。在任何情況下限制他們可用的選項子集可能是一個好主意。我原本試圖保持這種形式完全可降級(不是我真正期待迎合JS關閉的人,但如果某人的JS失敗或任何事情,我們總是被覆蓋)。 我的手是否通過瀏覽器通過GET發送表單數據的方式? – NateDSaint

回答

5

適合我。剛試過

http://www.nearby.org.uk/tmp/multi-test.html

<select name="multiselect[]" ... 

結果的URL ?多選%5B%5D = 2 &多選%5B%5D = 3

這將使$ _GET [ '多選']的PHP中的數組。

也許你在你的系統中有其他東西,剝離[]?

+0

這很奇怪,因爲當我最初嘗試這個「多選」並沒有將[]轉換爲%5B和%5D時,它就像他們一樣離開了他們[ ])服務器顯然不理解。 現在我正在嘗試它,它顯示了你在說什麼,所以讓我看看我是否還有其他潛在問題。 – NateDSaint

+1

@NateDSaint,是否有可能調試了沒有更新'[name]'的頁面的緩存版本? – zzzzBov

+0

史詩般的失敗了。顯然,我的一個JavaScript庫在發送到服務器之前已經徹底解決了所有問題。我正在測試沒有JS打開,它只是工作。離開這個問題,所以每個人都可以得到代表和其他人可以找到這個,因爲我正在擊敗我的頭撞牆試圖谷歌它。 – NateDSaint