2012-03-19 10 views
-2

私は現在、データベースにデータを送信するhtmlフォームを持っています。ユーザーはそれに名前とURLを送信し、テーブルに格納されます。私が達成しようとしているのは、ユーザーがテキストフィールドにURLを入力してurlフィールドにURLを入力し、データベースを検索して、その名前のエントリがすでに存在するかどうかを確認する場合です。もしそうなら、私はそれがデータベースにエントリを追加しないようにします。PHPの重複名チェックエントリ

これは、現在データベースに入力されている現在のデータを送信するように設定しています。

$title=$_POST['title']; 
$url=$_POST['url']; 
$query = "INSERT INTO images VALUES ('$title','$url')"; 
mysql_query($query) or die('Error, insert query failed'); 

私はまだPHPにかなり新しいので、どのように私がこれを達成することができます大いに感謝します!ありがとう! :)

+6

詐欺をチェックすることを心配する前に、コード内の[SQLインジェクション](http://bobby-tables.com/)の穴が開いてしまうのを心配してください。 –

+0

あなたはMYSQL SELECTを認識していますか? http://dev.mysql.com/doc/refman/5.0/ja/select.html – Endijs

答えて

4

あなたはuniqueとしてデータベースにタイトルを設定した場合、あなたが使用することができます。

INSERT INTO images SET 
    title = '$title', 
    url = '$url' 
ON DUPLICATE KEY UPDATE 
    url = '$url' 

これは、新しい行を挿入し、その特定のタイトルがデータベースにすでに存在している場合は、そのURLを更新します。

0

最初に選択してから返されたレコードがない場合は、挿入してください。

は** NOTEはあなたが別のルートを移動し、そのチェックを行いますストアドプロシージャを作成することができます持っているページを期待するあなたは、負荷に応じて、SQLインジェクション

を減らすために、あなたのDBにすべての入力をエスケープしてください既にそこにアイテムがある場合は、必要な場合に挿入されます。ストアドプロシージャを実行すると、データベースへの呼び出しが1回だけ行われます。

1

最も簡単な、最も簡単な方法は、この(または同じ仕事をして何か他のもの)にあなたのSQLを変更することです:

INSERT INTO images 
    SELECT '$title', 
      '$url' 
     FROM DUAL 
     WHERE NOT EXISTS 
      (
       SELECT * 
       FROM images 
       WHERE title = '$title' 
       AND url = '$url' 
      ) 

あなたは、それはだかどうかを判断するためにmysql_num_rowsmysql_insert_idまたは類似のものを使用することができます行を挿入しました。