ラジオボタンやチェックボックスなどのセレクトタイプのフォーム部品の初期値をDBから取得
checkedやselectedなどのoption要素はインラインで判定するのがおすすめ
CakePHPのみでなくPHP全体のエントリー。
セレクト型のフォーム部品には以下のものがある。
- ラジオボタン
- チェックボックス
- セレクトボックス
これらのフォーム部品は、複数の選択可能な要素から構成することができて、その中で標準(選択済み)の値を設定することができる。具体的には以下のように設定する。
ラジオボタンとチェックボックスでは、
checked
を指定することで選択済みの値を設定することができる。
<input type="radio" value="1" checked>On <input type="radio" value="0">Off
<input type="checkbox" value="0">option0 <input type="checkbox" value="1" checked>option1
セレクトボックスでは、
selected
オプションを指定することで現在の値を明示することが可能。
<select> <option value="0" selected>option0</option> <option value="1">option1</option> <option value="2">option2</option> </select>
上の状態で、ユーザーが別の選択肢を選んでsubmitすると、データベースの値が変更することになる。DBの値が変更したのであれば、上で設定されている選択済みのオプションもDBの値と同期させたほうがより良いといえる。
ユーザーが変更した値で選択済みのオプションを画面遷移先でダイレクトに変更するためには、
- 事前にデータベースの値を取得した上で
- 選択済みoption要素をインラインで判定
する方法がある。ラジオボタンの場合の具体例をあげてみる。
// $currentには0か1が返される if( $current = get_current_option_from_db( $param ) ) { $on = $current; } else { $off = $current; }
選択肢の名称に関連した変数を事前に用意しておき、phpで以下のようにインラインで判定する。
<input type="radio" name="dynamic_radio" value="1" <?php echo (isset($on) === false ? '' : 'checked') ?>>On <input type="radio" name="dynamic_radio" value="0" <?php echo (isset($off) === false ? '' : 'checked') ?>>Off
上の例はラジオボタンを例にしているが、チェックボックスやセレクトボックスに応用可能。