• ベストアンサー

ループでチェックボックスに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;

質問者が選んだベストアンサー

  • ベストアンサー
noname#68775
noname#68775
回答No.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; } でしょうか。

keita20000
質問者

お礼

kashiwagi様、出来ました。 なるほど、最初に初期化して、値が入った時点でbreakするんですね。 配列は難しくてなかなか進みませんが、頑張って勉強しようと思います。 本当にありがとうございました。勉強になりました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

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;

keita20000
質問者

お礼

yambejp様 いつもご回答ありがとうございます。 in_arrayも試してみましたが、出来ませんでした。 でもこんな書き方もあるんですね。 参考にさせて頂きます。 また勉強させてください。ありがとうございました。

関連するQ&A