m6uのエンジニアっぽい日記

PHP利用開発やFuelPHP利用開発、PostgreSQL利用開発、Androidアプリ開発、CentOS7サーバー構築など、テクニカルでエンジニアっぽい内容の日記

フォームで同一名で複数個のチェックボックスを扱うときは、name属性に「foo[]」のように配列管理することを示す必要がある

 ここ2~3日ハマっていた話。
 データベースのクエリー結果を元に、htmlでテーブルを組んでリスト表示させている中に、選択/非選択をユーザーが入力するためのチェックボックスを表示させたいと思いました。 例えばこんな感じ:

<td class="center"><?php echo Form::checkbox('k_cd', $rec['k_cd'], false); ?></td>

 webブラウザ上ではチェックボックスを適切に表示してくれるものの、何個チェックボックスをチェック入れても最後にチェックを入れた分しか受け取れなくて、なんでだろうって悩んでいました。 var_dump()するとこんな感じ:

  'k_cd' => string '159357' (length=6)

 (個人的に)イマイチ腑に落ちない方法で解決しました。
 「ウソだと思ってやってみな」としか言えない(思えない)のですが、《FuelPHP で複数選択させるチェックボックスを作る凡例 - Qiita》を参考にして得た結論が、チェックボックス要素のnameに「foo[]」のように配列管理することを示す記号を添えるというのが答えのようです。

<td class="center"><?php echo Form::checkbox('k_cd[]', $rec['k_cd'], false); ?></td>

 name属性に記号をつけてもいいんだ、目からうろこです。
 var_dump() すると、適切にパラメータを受け取っていることがわかります。 こんなふうに:

  'k_cd' => 
    array (size=5)
      0 => string '123456' (length=6)
      1 => string '135790' (length=6)
      2 => string '147258' (length=6)
      3 => string '147369' (length=6)
      4 => string '159357' (length=6)

 こちらも参考になります:《チェックボックスのバリデーションや値の受け渡しで悩む(FuelPHP) : てるてる坊主