- ベストアンサー
ループでチェックボックスにcheckedを入れたい
昨日質問させて頂きました件は、上手く行きました。ありがとうございました。また、行き詰ってしまったのでよろしくお願いいたします。 $intersectという配列があります。中身はarray(20,22)です。 データベースのテーブルから、fetch_arrayですべてを取り出し、 この値と同じである場合、チェックボックスにチェックを入れたいと考えています。 しかし、最後の値しかチェックボックスにチェックが入りません。どうかよろしくお願いいたします。 ********************************************************** $sql = "SELECT * FROM option_name"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $subject = $row["subject"];//題名 $option_no = $row["opno"];//プランNO foreach ($intersect as $value){ if($value == $option_no){ $checked = "checked"; }else{ $checked = " "; } } $op_subject .= "<input type='checkbox' name='subject[]' value='$option_no' $checked>$option_no$subject<br>"; } print $op_subject;
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんばんは。 foreach ($intersect as $value){ if($value == $option_no){ $checked = "checked"; }else{ $checked = " "; } だと、全部 else に流れます。 やるとすれば、初期化→一致でbreak、 $checked = ""; foreach ($intersect as $value){ if($value == $option_no){ $checked = "checked"; break; } でしょうか。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
foreachで回転させながらつねに$checkedを上書きしてますからねぇ・・・ こんな感じでよいのでは? while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $subject = $row["subject"]; $option_no = $row["opno"]; $checked = in_array($option_no,$intersect)?" checked":""; $op_subject .= "<input type='checkbox' name='subject[]' value='{$option_no}'{$checked}>{$option_no}{$subject}<br>"; } print $op_subject;
お礼
yambejp様 いつもご回答ありがとうございます。 in_arrayも試してみましたが、出来ませんでした。 でもこんな書き方もあるんですね。 参考にさせて頂きます。 また勉強させてください。ありがとうございました。
お礼
kashiwagi様、出来ました。 なるほど、最初に初期化して、値が入った時点でbreakするんですね。 配列は難しくてなかなか進みませんが、頑張って勉強しようと思います。 本当にありがとうございました。勉強になりました。