2

コードの一部に問題があり、誰かが助けてくれるかどうか疑問に思っています。

MySQLデータベースに情報を送信するフォームがあり、送信された製品コードがすでに存在するかどうかを確認するための正しいコードがあります。存在する場合は、警告メッセージが表示され、レコードは追加されません。

そのコードは次のとおりです。

$result = mysql_query("SELECT * FROM listing_1 WHERE product_code='$product_code'");
$num_rows = mysql_num_rows($result);
if ($num_rows) {
   adminwarnmessage("DUPLICATE REFERENCE CODE","FAILURE - <b>$product_name</b> has <b>NOT</b> been added because the reference number already exists.");
}

これはデータ入力には問題なく機能しますが、ユーザーがレコードを編集できる別のフォームがあります。これが問題の原因です。上記のコードは、データベースに一致するレコードがすでに存在することを示しているだけです。もちろん、レコードを保存(更新)しようとすると、重複しているため保存できないと表示されます。

私が望んでいるのは、ユーザーが既存の別の製品コードを選択できないようにすることですが、データベースから取得したフォームと同じ製品コードを使用してレコードを更新できるようにすることです。

それが理にかなっていることを願っています、どんな助けでも大いに感謝します。

4

5 に答える 5

1

id(主キー)をお持ちの場合は、レコードを更新する前に、その製品のIDと比較する必要があります。例えば

$result = mysql_query("SELECT * FROM listing_1 WHERE product_code='$product_code' AND id!=$id"); 
$num_rows = mysql_num_rows($result); 
if ($num_rows) { 
    echo "duplicate record";
}

ここで、$ idは、レコードの編集中に必要な製品のIDです。

于 2013-01-19T10:01:38.060 に答える
1

以下は、データベースを管理するときに実行する必要のある手順です。

  1. まず、「ID」フィールドに主キー(auto_increment)が必要です
  2. その時点で挿入クエリを実行するときは、最初にレコードがすでに使用可能かどうかを確認してください。利用できない場合は、挿入クエリを実行する必要があります。
  3. 更新、削除などのために提出された主キーを使用します。

上記の手順に従うと、この問題に直面することはありません

于 2013-01-19T10:07:12.550 に答える
0

insertupdateステートメントの両方で重複するオカレンスをチェックしていますか?もしそうなら、あなたはすべきではありません。重複エントリは、「挿入」する場合にのみ関係します。に同じチェックを使用しないでくださいupdate。お役に立てば幸いです。

于 2013-01-19T10:01:11.520 に答える
0

なぜ同じコードを更新するのですか?別のクエリを使用して更新することができます。これは、後で問題が発生した場合のデバッグに適しています。これを試して

$result = mysql_query("UPDATE listing_1 SET product_code='$new_product_code' WHERE product_code='$product_code' AND id='$id'");
if($result) {
   echo "your product was updated.";
} else {
   echo "your product is not in DB";
}

編集:物事の更新や挿入には注意してください。あなたがユニークでidない限り、常にチェックしてくださいproduct_code

于 2013-01-19T10:03:47.420 に答える
0

編集$productcodeフィールドを一意のインデックスにすることで、この問題を解決しました。重複がある場合は編集するとき。

Mysqlは更新クエリを受け入れず、エラーコードを返します

そのエラーコードをトラップして、ifステートメントに含めます...

if(mysql_errno()== '1062')

adminwarnmessage( "DUPLICATE REFERENCE CODE"、 "FAILURE-参照番号がすでに存在するため、$ product_nameは追加されていません");

} adminmessage( "アイテムが更新されました"、$productnameが正常に更新されましたおめでとうございます");

}

これにより、$ productcodeを編集できるようになりましたが、データベースですでに使用されているものに変更することはできません。

時間を割いて助けてくれた皆さん、ありがとうございました

于 2013-01-19T12:47:41.560 に答える