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比較明顯一點。)

CB01_1


這是一個普通的表單,但是,在JSP與PHP的環境差異,會讓表單的設計上很大的不同。

最大的問題在於,checkbox的名稱。(html中的name屬性)

在JSP當中,為同一選項中的checkbox全部都取成同樣的名稱,在從request中接受參數時,會自動成為一個String陣列。

 

如果本身會架設Apache以及Tomcat的話,你可以下載下面那個檔案來測試。

JSP跟PHP命名差異範例檔

 

如果你沒有Tomcat或是Apache的環境,那也沒關係,你可以使用本網站的網頁來自己試試看。

JSP與PHP的範例:JSP版本 (已移除)

JSP與PHP的範例:PHP版本

 

 

 

首先,先從JSP開始說起,JSP處理request中接收到的參數時,是一律將input中的name當成索引值,不論裡面裝的是什麼都一樣。

jsp收到PODT參數時的處理方式

例如下面這個例子,就是一個索引值是「cb1[]」的陣列,如果有input擁有同樣的名字,就會把它存到同個陣列當中。

<input type="checkbox" name="cb1[]" value="CB11">

在JSP當中,可以使用request.getParameter(“cb1[]"); 去取得這個字串。

 

但是,PHP就不一樣了,當名稱中含有「[]」時,代表的是將該索引值傳遞的參數宣告為陣列。例如上面那個例子,PHP產生的會是,一個叫做cb1的陣列,在PHP中,可以使用 $_POST[‘cb1’] 去取得該陣列。

如下圖:

PHP的參數接收

 

從上圖可以看到,當名稱設定成時cb1[]時,收到的會是陣列。

當名稱設定成cb2時,則收到字串,而字串內容以最後和選的選項為準。

 

至於消失的cb3(紫色)… 那又是另一種狀況了。

看下圖,由這章圖可以確定cb3的選項是正常的。

PHP POST陣列

當兩個chosebox的名稱分別為cb3以及cb3[]時,後生成的cb3[]會把先生成的cb3給覆蓋掉,於是,收到的$_POST當中就只剩cb3[]陣列了。

 

Comments are closed.

Close Print