2017-12-03 24 views
0

テキストボックスから複数のレコードをmysqlテーブルに挿入しようとしています。 2つ以上のレコードを入力すると、重複が挿入されます。 コードは次のとおりです。 私は何が間違っていますか?重複行の挿入を防止するphp/mysql

いくつかの詳細は

表情報

id (int) primary auto_increment 
email (varchar) 
imei (varchar) 
date_ordered (datetime) 
status(varchar) 

それはほんの始まりだので、私はテーブル構造を変更することで問題はありません。

$email = $_SESSION['email']; 
$now = time(): 
$status = "1"; 

$imeis = $_POST['imeis']; 
$row = explode("\n", $imeis); 

foreach ($row as $key => $imei) 
{ 
    $imei = mysql_real_escape_string($imei); 

    $query = "SELECT * FROM orders WHERE imei = '$imei'"; 
    $result = mysqli_query($link, $query); 

    if (mysqli_num_rows($result) == 0) 
    { 
     $query1 = "INSERT IGNORE INTO orders (email, imei, date_ordered, status) VALUES ('$email', '$imei', '$now', '$status')"; 
     $result1 = mysqli_query($link, $query1) OR die("fml"); 

     if ($result1) 
     { 
      echo "Added $imei<br>"; 
     } 
    } 

    else 
    { 
     echo "<B>$imei</B> already there<br>"; 
    } 

} 
+0

この部分はおそらくトリッキー 'OR die(" fml ")' –

+0

@BarbarosÖzhanそれは本当に助けにはならない。 @OP最初の問題は 'INSERT IGNORE'です。それは言っているようです:私は重複がある場合は気にしない、それを無視して続行する。第二に、 'OR die(" fml ")はあなたを助けてくれていません。それは問題があるが、問題は何かではないことを伝えます。プロダクションが始まるまで、あなたは実際に有用な情報を得るために 'OR die(" Errormessage:%s \ n "、mysqli_error($ link))'を使うべきです。 – icecub

+0

@icecubありがとう、私の役に立つ。 –

答えて

0

imeiの各値をテーブル内で一意にするように見えます。それは推測ですが、あなたがしているように見えます。

imei列を一意にすることによって、つまり一意のインデックスを作成することで、SQLでこれを実行できます。現在のテーブルの一意の(プライマリ)キーとしてidがあります。別のものを簡単に作成することができます。

関連する問題