2019-06-12

チェックボックスの値を送信し受け取る

PHPに関する記事

検索機能やお問合せフォームでしばしばチェックボックスを使用する機会があります。
選択された項目を配列で受け取り、送信された値を表示してみましょう。

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"])で取得できます。

スポンサーリンク

まとめ

上記の例は、データを送信し受け取るという動作のみです。実際に公開するアプリケーションでは受け取った値を検証(バリデーション)する必要があります。というのは送信されたデータが偽装されている可能性があるためです。チェックボックスとして用意されていないのにも関わらず、北海道や沖縄といった内容が送られてくる可能性もあるのです。値の内容や形式を必ず検証しましょう。