同じname属性値が複数あるチェックボックスのリクエストを、サーバ側のPHPで受け取る方法
formタグ内にチェックボックスを複数配置する場合、ありがちな間違いとして、以下のコード例があげられる。
<form method="POST" action="test.php" > <input type="checkbox" name="pic_id" value="1">1</input> <input type="checkbox" name="pic_id" value="3">2</input> <input type="checkbox" name="pic_id" value="3">3</input> <input type="submit" value="submit" name="submit" /> </form>
しかし、本コードは正しく動作しない。今回はPHPでチェックボックスのリクエストを受け取る方法を記述する。
PHPでうまく受け取る方法
HTTPリクエストをサーバ側のPHP側で受け取る場合、inputタグのvalue値はHTTP Body(GETならクエリストリング)に格納され、以下の形でサーバ側にリクエストを飛ばす。
pic_id=1&pic_id=2&pic_id=3
リクエストをサーバ側(PHP側)で受け取る場合、以下のPHPコードでは最初の一つ(この場合、pic_id=1)しか値を取得できません。
$pic_id = $_POST["pic_id"]
この問題を回避するために、inputタグのname属性を変更する必要がある。
<input type="checkbox" name="pic_id_array[]" value="1">1</input> <input type="checkbox" name="pic_id_array[]" value="3">2</input> <input type="checkbox" name="pic_id_array[]" value="3">3</input>
サーバ側のPHPで電文の値を受け取る例が以下のコード例です。
$pic_idArray = $_POST["pic_id_array"]; foreach( $pic_id_array as $pic_id ){ echo $pic_id; }