「みんな教えて! 選手権!!」開催のお知らせ

いつも助けていただきましてありがとうございます。

チェックボックスの値をMysqlに登録するところまではできましたが、
今度それを、確認・更新画面に読み込む方法でつまずいています。
どうぞご指導をお願い致します。
Mysqlから「days_id」の値が「0,2,5」と取得されても
実際のチェックが付くのが、「5」のみなってしまいます。
配列としてMysqlから値を取得する方法を教えて下さい。

$res = mysql_query($sql);
$i=0;
foreach($labels as $label){
while ($row = mysql_fetch_array($res)) {
$days_id = $row["days_id"];
}

if($i==$days_id){
$checked = " checked";
echo "<label>\n<input type=\"checkbox\" name=\"job_type[]\" value=\"{$i}\" {$checked} />{$label}</label>";
}else{
$checked = "";
echo "<label>\n<input type=\"checkbox\" name=\"job_type[]\" value=\"{$i}\" {$checked} />{$label}</label>";
}
$i++;
}

A 回答 (2件)

根本的にアルゴリズムが変。

あと、phpには、有用な関数がいっぱいあるので、配列内に或る値が存在するかのチェック用関数もある。

$res = mysql_query($sql);
// 先に下準備で、データを得る
$days_id=array();// 空配列宣言
while ($row = mysql_fetch_array($res)) {
$days_id[] = $row["days_id"];
// []内の添え字無しで、配列の要素に順に格納=array_push()
}

// 本番出力用ループ
$len = count($labels);
for($i=0; $i< $len; $i++){
// ↑ここは、foreach でもいいけど、どうせ配列のインデックスが必要なのだからforの方が自然。

// 配列$days_idの値に $iがあるかチェック
if( in_array( $i, $days_id) ){
$checked = " checked";
}else{$checked = " ";}

echo "<label>\n<input type=\"checkbox\" name=\"job_type[]\" value=\"{$i}\" {$checked} />{$labels[$i]}</label>";

}

参考URL:http://php.benscom.com/manual/ja/function.in-arr …
    • good
    • 0
この回答へのお礼

ありがとうございます。
感動です。初心者で独学なので、ひとつひとつが勉強です。
アルゴリズムと言う言葉も聞いたことはありますが、
なんのことやらってレベルですので、また勉強していきたいと
思います。

丁寧にご回答を頂き、本当に感謝致します。
ありがとうございます。

お礼日時:2007/09/13 22:34

phpは使ったことが無いのですが、}の場所、おかしくありませんか?



それに
>チェックが付くのが、「5」のみなってしまいます
というか、最後のデータだけ表示されませんか?

違っていたらすみません。

$res = mysql_query($sql);
$i=0;
foreach($labels as $label){
while ($row = mysql_fetch_array($res)) {
$days_id = $row["days_id"];
#}<-ここにあると、$days_idを空更新している(最後の$days_idを持って次へ、それも1度だけ)

if($i==$days_id){
$checked = " checked";
echo "<label>\n<input type=\"checkbox\" name=\"job_type[]\" value=\"{$i}\" {$checked} />{$label}</label>";
}else{
$checked = "";
echo "<label>\n<input type=\"checkbox\" name=\"job_type[]\" value=\"{$i}\" {$checked} />{$label}</label>";
}
$i++;
}<-ここじゃない?
}


$p.s.
$i=0の位置も何か・・・foreachの後じゃないと・・・

この回答への補足

ありがとうございまs。

>チェックが付くのが、「5」のみなってしまいます
というか、最後のデータだけ表示されませんか?

ご指摘の通りです。
いろいろ移動させてみたりしたのですが、
うまくいかず暗礁に乗り上げております。

補足日時:2007/09/13 15:50
    • good
    • 0

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


おすすめ情報