アプリ版:「スタンプのみでお礼する」機能のリリースについて

昨日質問させて頂きました件は、上手く行きました。ありがとうございました。また、行き詰ってしまったのでよろしくお願いいたします。

$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;

A 回答 (2件)

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;
    • good
    • 0
この回答へのお礼

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

また勉強させてください。ありがとうございました。

お礼日時:2008/09/23 02:58

こんばんは。



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;
}

でしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/23 02:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています