2019-06-12
チェックボックスの値を送信し受け取る
検索機能やお問合せフォームでしばしばチェックボックスを使用する機会があります。
選択された項目を配列で受け取り、送信された値を表示してみましょう。
inputタグのname属性に配列を使用する
単一の値を送信するラジオボタンと異なり、チェックボックスは複数の値を選択し送信することが可能です。
複数選択のチェックボックスには、name="item[]"
の形式でname属性に配列を使用します。
下記のコードはチェックボックスを含むHTMLです。
<form method="post" action="receive.php">
<input type="checkbox" name="item[]" value="東京">東京
<input type="checkbox" name="item[]" value="神奈川">神奈川
<input type="checkbox" name="item[]" value="千葉">千葉
<input type="checkbox" name="item[]" value="埼玉">埼玉
</form>
method=""
はデータの送信形式で、post
またはget
を指定します。今回はPOST形式で送信します。
action=""
には値の送信先を指定します。上記の例ではreceive.phpへ値を送信します。
receive.php
<?php
// 受け取った配列をそのまま表示
if (isset($_POST["item"]) && is_array($_POST['item'])) {
echo "<pre>";
print_r($_POST["item"]);
echo "</pre>";
}
// 配列を文字列に結合して表示
if (isset($_POST["item"]) && is_array($_POST['item'])) {
$pref = implode("と", $_POST["item"]);
echo "選択された県は、" . $pref . "です"; //選択された県は、神奈川と千葉です
}
送信されるデータは実際にチェックされた項目の値のみ。配列のキーは0から順番に振られます。例えば2番目の神奈川、3番目の千葉にチェックがされていた場合は、$_POST["item"][0]
に神奈川、$_POST["item"][1]
に千葉が入ります。
チェックされた項目の数はcount($_POST["item"])
で取得できます。
まとめ
上記の例は、データを送信し受け取るという動作のみです。実際に公開するアプリケーションでは受け取った値を検証(バリデーション)する必要があります。というのは送信されたデータが偽装されている可能性があるためです。チェックボックスとして用意されていないのにも関わらず、北海道や沖縄といった内容が送られてくる可能性もあるのです。値の内容や形式を必ず検証しましょう。