normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

同じ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;
}