PHPでチェックボックスを配列のように扱う

(1/1)
Web アンケートなどの複数選択肢として、よくチェックボックスが使われる。
PHP には、複数選択されたチェックボックスを配列として扱う機能がある。この機能を利用することで、プログラムを簡素化することができる。

サンプル・プログラム

サンプル・プログラムの解説:前処理

まず、質問項目を配列変数 $questions に代入しておく。

プログラムは、チェックボックスを選択する指定する部分と、選択肢を一覧表示する部分の2つに分かれる。例によって、変数 $_POST に渡された内容によって、2つのプログラムを切り替えることができるようにしてある。

0015: $questions = array('PHP', 'Ruby', 'Perl', 'Java',
0016:     'JavaScript', 'VisualBasic', 'VisualC++', 'VisualC#');

サンプル・プログラムの解説:チェックボックスの表示

チェックボックスの表示だが、配列変数 $questions の内容を逐次表示するだけである。
ここで注意してほしいのは、HTML の <input type="checkbox"> タグname 属性item[*] という配列変数のような文字列を設定していることである。これを行うことで、PHP から配列変数として扱えるようになる。

0031: echo <<< EOF
0032: <h1>■よく使う言語を選んでください(複数選択可)</h1>
0033: <form method="post" action="{$myself}">
0034: 
0035: EOF;
0036:     $i = 0;
0037:     foreach ($questions as $val) {
0038: echo <<< EOF
0039: <input type="checkbox" name="items[{$i}]" value="{$val}" />
0040: {$val}<br />
0041: 
0042: EOF;
0043:     $i++;
0044:     }
0045: 
0046: echo <<< EOF
0047: <p><input type="submit" value="送信" /></p>
0048: </form>
0049: 
0050: EOF;

サンプル・プログラムの解説:選択結果の表示

次に、選択結果の表示である。
チェックボックスの内容は、POST メソッド で送信され、配列変数 $_POST["items"] に格納されている。これは、送出側の name 属性item[*] にしたおかげである。
あとは、foreach 構文 を使い、わずか 1行で選択肢の内容を取り出すことができる。

0054: echo <<< EOF
0055: <h1>■選択された言語</h1>
0056: 
0057: EOF;
0058: $items = $_POST['items'];
0059: foreach ($items as $val)    echo htmlspecialchars($val) . "<br />\n";
0060: 
0061: echo <<< EOF
0062: <form method="post" action="{$myself}">
0063: <input type="submit" value="戻る" />
0064: </form>
0065: 
0066: EOF;
0067: }
0068: echo <<< EOF

このテクニックはいろいろな応用がきく。ぜひ覚えておいていただきたい。
(この項おわり)
header