読者です 読者をやめる 読者になる 読者になる

m6uとFuelPHPとPostgreSQLとAndroid

FuelPHPまわりのメモ、初心者に産毛程度を生やす。

フォームで同一名で複数個のチェックボックスを扱うときは、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) : てるてる坊主