プロが教える店舗&オフィスのセキュリティ対策術

チェックボックスでチェックした配列の値を データベースのカラム名と照らし合わせて
一致する所に「1」を入れたいのですが、うまくいきません。

PHP Version 5.1.6
MySQL - 5.0.45
で運用しています。

どうしたら、入れることができるでしょうか?
ご教授、よろしくお願いいたします。

1 送るページ

$sql = "select * from `class_tbl`";
$rest = mysql_query($sql, $con);

while($col = mysql_fetch_array($rest)) {
$classID = $col["classID"];
$class_name = $col["class_name"];

$sql = "select * from `member_sub_tbl` where `ID` ='$ID'";
$rst = mysql_query($sql, $con);

while($col = mysql_fetch_array($rst)) {
$kekka = $col["$classID"];

if($kekka==1){
echo <<<EOF
<input type="checkbox" name="classID[]" value="$classID" checked/> $class_name
EOF;
}
else{
echo <<<EOF
<input type="checkbox" name="classID[]" value="$classID" /> $class_name
EOF;
}
}
}
echo <<<EOF
<input name="ID" type="hidden" value="$ID" />
EOF;

2 受けるページ

$ID=$POST["ID"];
$classID=$POST["classID"];

var_dump($_REQUEST);

以下のように表示しています。

array(3) { ["classID"]=> array(10) { [0]=> string(4) "1010" [1]=> string(4) "1050" [2]=> string(4) "1110" [3]=> string(4) "1182" } ["sn"]=> string(2) "45" ["PHPSESSID"]=> string(32) "********************" }

「ID」の行に、配列の「1010」「1050」と 「member_sub_tbl(テーブル)」の「カラム名」を比較して、一致する所に「1」を入れたいのですがうまくいきません。
※update をしたいのです。

試行錯誤していますが、方法が分かりません。

ご教授、よろしくお願いいたします。

A 回答 (2件)

おっと。

失礼。

$sql = sprintf("update `member_syb_tbl` set " . implode(',' ,$set) . " where `ID` = '%s'", mysql_real_escape_string($ID));

ですね。

とりあえず

$set = array();
foreach ($classID as $val) { $set[] = '`' . $val . '` = 1'; }
print implode(', ', $set);

で出力した内容がupdate文でセットしたい内容になっているか確認すればいいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます!

1010=1 と言うのを先に作って、それをupdate文に入れるということですね。

1行ずつ考えたら理解できました。

大変助かりました!!

今回は丁寧に2度まで教えて頂き、ありがとうございました。

お礼日時:2012/11/03 20:33

ネイティブなMySQL関数は久しぶりですが、下記のような感じでどうでしょうか?



$set = array();
foreach ($classID as $val) { $set[] = '`' . $val . '` = 1'; }
$sql = sprintf("update `member_syb_tbl` set ' . implode(',' ,$set) . " where `ID` = '%s'", mysql_real_escape_string($ID));



本来はMySQLiかPDOで書き直したいところですが(汗

この回答への補足

すみません。。

今日一日、頑張って考えてみたいのですが理解できません。。。

恐れ入りますが、少し噛み砕いて教えて頂けるとありがたいです。

勝手な事言ってますが、よろしくお願いいたします。

※ソースをそのまま貼り付けると、エラー表示がでます。
>$sql = sprintf("update `member_syb_tbl` set ' . implode(',' ,$set) . " where `ID` = '%s'", mysql_real_escape_string($ID));

Parse error: syntax error, unexpected T_STRING

補足日時:2012/11/03 19:05
    • good
    • 0

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