PHPでチェックボックスを設置する場合、チェックボックスだけだと、チェックが入ったものしか取得できません。そこで、ネット上では、よくhiddenで同じものを用意する技が紹介されています。
それを応用し、用意されたアイテムにチェックが入っているかどうかがわかるようにしてみました。
例えば、下記のように$itemという配列を用意し、これらにチェックが入っているかどうかを調べたいと思います。
$item = array('1', '2', '4', '6', '8');
チェックボックスのnameは配列に、並行してhiddenでアイテムを埋め込んでおきます。
$i=1;
for ($i=1; $i<5; $i++) {
echo '<input type="hidden" name="test_item['.$i.']" value="'.$item[$i].'">';
echo '<input type="checkbox" name="test['.$i.']" value="'.$item[$i].'" checked>'.$item[$i];
} else {
echo '<input type="hidden" name="test_item['.$i.']" value="'.$item[$i].'">';
echo '<input type="checkbox" name="test['.$i.']" value="'.$item[$i].'">'.$item[$i];
}
データを取得する側。
// まずチェックボックスの内容を取得。
$data1 = $_POST["test"];
// チェックボックスの内容を見て、チェックが入っているものに 1 を代入する。
foreach ($data1 as $chkd) {
$chk[$chkd]=1;
}
// hiddenのほうは、アイテムのすべてが格納されています。
$data2 = $_POST["test_item"];
foreach ($data2 as $item2) {
// 中身を除くと、$item2にはアイテムが入っていて、$chk[$item2]には、チェックされていたら1、チェックが入っていなかったら0が入っている。
echo $item2.' -> '.$chk[$item2].'<br>';
}
アイテム名でチェックを確認できるようにしてあるのが、ポイントです。
コメント