PHPで「select multiple」

2007/07/09 | PHPの基本

PHPでフォームを操作する際には、場合によってはいろいろ工夫が必要な場合がある。

例えばチェックボックス。複数項目チェックOKな場合のチェックボックスを作成する場合、全てのチェックボックスのname属性を同じにしていると、正しくデータを受け取ることは出来ない。

<input type="checkbox" name="myCheckBox" value="1" />check1
<input type="checkbox" name="myCheckBox" value="2" />check2
<input type="checkbox" name="myCheckBox" value="3" />check3
<input type="checkbox" name="myCheckBox" value="4" />check4

このように書いて、複数チェックしても、一番最後のチェックしかデータを拾ってくれない(IISのASPなどはこれでも正しく受け取れる)。
これを回避するには以下のいずれかの方法がある。

○name属性をそれぞれ個別に設定してやる
○name属性の値に「[]」をつける

前者での場合の記述は以下のようになる。

<input type="checkbox" name="myCheckBox1" value="1" />check1
<input type="checkbox" name="myCheckBox2" value="2" />check2
<input type="checkbox" name="myCheckBox3" value="3" />check3
<input type="checkbox" name="myCheckBox4" value="4" />check4

上記のように記述すれば、それぞれ個々に値が渡される。
後者の場合は、以下のように記述することになる。

<input type="checkbox" name="myCheckBox[]" value="1" />check1
<input type="checkbox" name="myCheckBox[]" value="2" />check2
<input type="checkbox" name="myCheckBox[]" value="3" />check3
<input type="checkbox" name="myCheckBox[]" value="4" />check4

このように記述するとPHP側では、選択されたデータが配列として格納される。つまり以下のように取得できる(例)。

$_REQUEST[‘myCheckBox’]=array(‘1′,’3′);

一工夫必要なわけだ。
これはチェックボックスだけではなく「select multi」なフォームエレメントでも同様だ。ただし、こちらの場合はname属性で指定できるのは一つだけなので、上記のうち後者の方法(配列で受け取る方法)のみ利用できることになる。

初心者にはわかりにくいかもしれない。
「select multiple」などはQuickFormでもサポートされていなかったりするので、なおさらだ。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net