JSP 與 PHP 的差異:用戶端HTML中的陣列命名
相信常寫網頁的人一定對下面幾行很熟了。
<form action="test.php" method="post"> <input type="checkbox" name="cb1" value="CB11">CB01_1 <HR> <input type="submit" value="送出"> </form>
以上語法,成現出來的效果就是這樣子(我改了一下底色,讓form比較明顯一點。)
這是一個普通的表單,但是,在JSP與PHP的環境差異,會讓表單的設計上很大的不同。
最大的問題在於,checkbox的名稱。(html中的name屬性)
在JSP當中,為同一選項中的checkbox全部都取成同樣的名稱,在從request中接受參數時,會自動成為一個String陣列。
如果本身會架設Apache以及Tomcat的話,你可以下載下面那個檔案來測試。
如果你沒有Tomcat或是Apache的環境,那也沒關係,你可以使用本網站的網頁來自己試試看。
JSP與PHP的範例:JSP版本 (已移除)
JSP與PHP的範例:PHP版本
首先,先從JSP開始說起,JSP處理request中接收到的參數時,是一律將input中的name當成索引值,不論裡面裝的是什麼都一樣。
例如下面這個例子,就是一個索引值是「cb1[]」的陣列,如果有input擁有同樣的名字,就會把它存到同個陣列當中。
<input type="checkbox" name="cb1[]" value="CB11">
在JSP當中,可以使用request.getParameter(“cb1[]"); 去取得這個字串。
但是,PHP就不一樣了,當名稱中含有「[]」時,代表的是將該索引值傳遞的參數宣告為陣列。例如上面那個例子,PHP產生的會是,一個叫做cb1的陣列,在PHP中,可以使用 $_POST[‘cb1’] 去取得該陣列。
如下圖:
從上圖可以看到,當名稱設定成時cb1[]時,收到的會是陣列。
當名稱設定成cb2時,則收到字串,而字串內容以最後和選的選項為準。
至於消失的cb3(紫色)… 那又是另一種狀況了。
看下圖,由這章圖可以確定cb3的選項是正常的。
當兩個chosebox的名稱分別為cb3以及cb3[]時,後生成的cb3[]會把先生成的cb3給覆蓋掉,於是,收到的$_POST當中就只剩cb3[]陣列了。