4

私は怠惰な(または賢い)ことを試みています:MySQLテーブルの7つの列に相関する7つのチェックボックスがあります。

チェックボックスは配列で投稿されます:

$can = $_POST['can'];

MySQL挿入の変数をダンプするために、次のループを作成しました。

for($i=1;$i<8;$i++){
    if($can[$i] == "on"){
        ${"jto_can".$i} = 'Y';
    }
    else{
        ${"jto_can".$i} = 'N';
    }
}
print_r($jto_can1.$jto_can2.$jto_can3.$jto_can4.$jto_can5.$jto_can6.$jto_can7);

これは正しく出力します:

YYNYYYY

ただし、MySQLアップデートでこれらの変数を使用しようとすると、変更が受け入れられません。

mysqli_query($db, "UPDATE jto SET jto_can1 = '$jto_can1', jto_can2 = '$jto_can2', jto_can3 = '$jto_can3', jto_can4 = '$jto_can4', jto_can5 = '$jto_can5', jto_can6 = '$jto_can6', jto_can7 = '$jto_can7' WHERE jto_id = '$id'")or die(mysqli_error($db));

誰かがprint_rが変数を表示するのにMySQLアップデートが表示しない理由を説明できますか?

4

2 に答える 2

2

配列に固執し、クエリを動的に形成します。

$sql = 'UPDATE jto SET ';

$cols = array();
foreach( range( 1, 7) as $i) {
    $value = $_POST['can'][$i] == 'on' ? 'Y' : 'N'; // Error check here, $_POST['can'] might not exist or be an array
    $cols[] = 'jto_can' . $i . ' = "' . $value . '"'; 
}

$sql .= implode( ', ', $cols) . ' WHERE jto_id = "' . $id . '"';

ここでvar_dump( $sql);、新しい SQL ステートメントを確認するために a を実行します。

于 2013-02-25T18:14:16.540 に答える
1

これは mysql の問題ではありません。mysql は、その文字列に入力した内容のみを認識します。たとえば、mysql_query を実行する前にクエリ文字列をダンプします。このクエリを別の場所で実行していて、スコープの問題に遭遇したと思います。はい、これは怠け者です。いいえ、「賢い」ではありません。あなたは自分のためにもっと仕事をしているだけです。やって何が悪い

INSERT ... VALUES jto_can1=$can[0], jto_can2=$can[1], etc...
于 2013-02-25T18:16:02.667 に答える