0

テーブル車両と単純な php フォームがあります。データを挿入する前に、車両登録番号が存在するかどうかを確認しますが、一部のクライアント PC が重複したエントリを入力する可能性があります。以下はコードスニペットです。他に何が原因でしょうか?

$vehicleRegistrationNumber=$_POST['vehicleRegistrationNumber'];
$selectQuery1 ="Select vehicleRegistrationNumber From Vehicle Where vehicleRegistrationNumber='".$vehicleRegistrationNumber."'"; 
$result1 = mysqli_query($link,$selectQuery1);
$row1 = mysqli_fetch_array($result1, MYSQL_ASSOC);
$n1 = mysqli_num_rows($result1);

if($n1 > 0) {
  $status="<span class=\"statusFailed\">: Vehicle ".$vehicleRegistrationNumber." Already Exist.</span>";
}
else {
  //insert codes
}
4

3 に答える 3

1

group by でこれを試してください

 $selectQuery1 ="Select vehicleRegistrationNumber From Vehicle Where vehicleRegistrationNumber='".$vehicleRegistrationNumber."' GROUP BY vehicleRegistrationNumber"; 
于 2013-06-21T18:16:00.613 に答える
1

最善の方法は、SQL 側で処理することです。フィールドを UNIQUE INDEX として定義するだけです。

重複したインデックスを挿入しようとすると、エラーがスローされ、次のようにキャッチできます。

if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }

このように、すべての挿入クエリの前に選択クエリを回避できます。必要に応じてエラーを処理してください。

于 2013-06-21T19:15:27.227 に答える
1

まず第一に、コードは SQL インジェクションに対して脆弱です。XYZ0001' AND 1='0このチェックは、同様の値またはさらに悪意のある値を送信することでバイパスできます。これを防ぐには、文字列連結の代わりに、準備済みステートメントとパラメーター バインディングを使用します。

その他の可能性としては、単なるユーザーのミスです。たとえば"XYZ001" != "XYZ0001 "、DB の広告レコードを一見しただけでは見つけにくい末尾のスペース ( ) などです。DB でその存在を確認する前に、送信された値に許可された文字のみが含まれており、一般的な間違いがないかどうかを PHP で確認する必要があります。

于 2013-06-21T19:02:20.647 に答える