PHPで「select multiple」
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でもサポートされていなかったりするので、なおさらだ。