4

この問題をどのように克服できるかについて、誰かが光を当てることができるかどうか疑問に思っていました.

データベースに情報を追加および更新しようとしているので、ユーザーが最初にアンケートに入力すると問題なく動作しますが、アンケートを更新するために戻ったときに、「戻ってもう一度やり直してください」というエラーがスローされます。 .

これまでに提供された推奨事項で PHP コードを更新しました。

ありがとうございました。

PHP コード:

function updatePartCTQ_part1($questionAns, $memberid) {

//First Insert MemberID
$ctqmemberinsert = "INSERT INTO ctq_questionnaire (user_id) VALUES ('$memberid')";
$addresult = mysqli_query($ctqmemberinsert);

if ($addresult) {

    $update = "UPDATE ctq_questionnaire SET Item1= '{$questionAns[0]}', Item2 = '{$questionAns[1]}' WHERE user_id = '$memberid'";

    mysqli_query($conn, $update);

} else {
    echo 'Please go back and try again';
}
}

どんな助けでも大歓迎です。

完成したコード

Michael と他の人たちのおかげで、コードを機能させることができたので、更新を投稿しようと思いました。

function updatePartCTQ_part1($questionAns, $memberid) {

//Check whether user exists
$exists = mysql_query("SELECT * FROM ct1_questionnaire WHERE user_id = '$memberid'");

if (mysql_num_rows($exists) === 0) {
    // Doesn't exist. INSERT User into Table

    $ctqmemberinsert = "INSERT INTO ctq_questionnaire (user_id) VALUES ('$memberid')";
    mysqli_query($ctqmemberinsert);
} 
    // UDPATE after INSERT

    $update = "UPDATE ctq_questionnaire SET Item1= '{$questionAns[0]}', Item2 = '{$questionAns[1]}, Item3 = '{$questionAns[2]}',  
    Item4 = '{$questionAns[3]}',Item5 = '{$questionAns[4]}', Item6 = '{$questionAns[5]}', Item7 = '{$questionAns[6]}', 
    Item8 = '{$questionAns[7]}', Item9 = '{$questionAns[8]}', Item10 = '{$questionAns[9]}', Item11 = '{$questionAns[10]}', 
    Item12 = '{$questionAns[11]}', Item13 = '{$questionAns[12]}', Item14 = '{$questionAns[13]}', Item15 = '{$questionAns[14]}'
    WHERE user_id = '$memberid'";

    mysql_query($update);
}
4

2 に答える 2

1

UPDATE構文が正しくありません。SET次のキーワードを繰り返さないでください。

$update = "UPDATE ctq_questionnaire SET Item1= '{$questionAns[0]}', Item2 = '{$questionAns[1]}' WHERE user_id = '$memberid'";
//-------------------------------------------------------------^^^^^^^ no SET here        

読みやすくするために、配列の値を で囲むことをお勧めしますが{}、あなたのやり方でうまくいくはずです。

は例外をスローしないtry/catchため、あまり役に立たないことに注意してください。mysql_query()代わりに、エラーが発生した場合にのみ返さFALSEれます。代わりに、変数に格納して、 で行ったようにテストしTRUE/FALSEますINSERT

// We assume these values have already been validated and escaped with mysql_real_escape_string()...
$update = "UPDATE ctq_questionnaire SET Item1= '{$questionAns[0]}', Item2 = '{$questionAns[1]}' WHERE user_id = '$memberid'";
$upd_result = mysql_query($update);
if ($upd_result) {
  // ok
}
else {
  // error.
}

最後に、以前に聞いたことがあると思いますが、古いmysql_*()関数は非推奨になる予定です。MySQLi や PDO など、準備済みステートメントをサポートする API への移行を検討してください。

アップデート

後続の呼び出しで一意のインデックスまたは PK があると仮定するとctq_questionnaire.user_id、最初のクエリはエラーになり、2 番目のクエリは実行されません。最も簡単な修正はINSERT IGNORE、キー違反を成功として扱う を使用することです。

$ctqmemberinsert = "INSERT IGNORE INTO ctq_questionnaire (user_id) VALUES ('$memberid')";

より複雑な解決策は、ユーザー名がテーブルに存在するかどうかを最初にテストし、存在しSELECTない場合はINSERT.

$exists_q = mysql_query("SELECT 1 FROM ct1_questionnaire WHERE user_id = '$memberid'");
if (mysql_num_rows($exists_q) === 0) {
  // Doesn't exist. Do the INSERT query
}
// proceed to the UDPATE after INSERTing if necessary
于 2012-09-02T15:03:52.967 に答える
0

挿入を次のように変更するだけです。

$ctqmemberinsert = "INSERT INTO `ctq_questionnaire` (`user_id`, `Item1`, `Item2`)
    VALUES ( '$memberid', '" . 
        mysql_real_escape_string($questionAns[0]) . "', '" . 
        mysql_real_escape_string($questionAns[1]) . "' )";
于 2012-09-02T15:06:25.387 に答える