2016-05-30 25 views
1

Ich möchte doppelte Werte in einer Datenbanktabelle von einem Formular mit PHP verhindern.verhindern, Daten in die Datenbank einzufügen, wenn ein bestimmtes Attribut bereits existiert

Ich habe eine Tabelle Daten auf Datenbank, die atribute dataid (Autoinkrement als Primärschlüssel), data1, data2.

Und ich habe eine einfache Form wie diese

<h2>Enter your data</h2> 
<form action="script.php" method="post"> 
    Data 1:<input type="text" name="data1" /></p> 
    Data 2:<textarea name="data2"></textarea></p> 
    <input type="submit" name="submit" value="Add Data" /> 
</form> 

Es ist script.php für Daten in der Datenbank

<?php 
    if(isset($_POST['submit'])) 
    { 
     //connect to the database 
     $conn = mysql_connect('host', 'username', 'password', 'dbname') or die(mysql_error()); 

     //insert results from the form input 
     $query = "INSERT INTO data(data1, data2) VALUES('$_POST[data1]', '$_POST[data2]')"; 

     $result = mysql_query($conn, $query) or die(mysql_error()); 
    } 
?> 

eingefügt, aber es wird alle Daten aus dem Formular zur Datenbank einzufügen. Wie kann ich verhindern, Daten in die Datenbank einzufügen, wenn data1 bereits existiert?

+1

existieren können Sie Spalten machen 'unique' in Ihrer DB – Naruto

+0

Wenn er es einzigartig und versucht macht Um die Abfrage wie geschrieben auszuführen, wird ein Fehler ausgegeben. Nun, vielleicht ist das in Ordnung, aber der beste Weg, damit umzugehen, wäre, die Spalte nicht nur eindeutig zu machen, sondern auch nach der Existenz von data1 in der Tabelle zu suchen. Wenn sie nicht vorhanden ist, führe die Einfügeabfrage aus. –

+1

Oder Sie könnten tun, was Naruto vorgeschlagen und auch eine nicht veraltete mysql API verwenden und Ihre Insert in einen try/catch-Block wickeln. Auf diese Weise müssen Sie nicht zwei Abfragen durchführen. – Mike

Antwort

0

Die Lösung für Ihr Problem besteht darin, die Spalte eindeutig zu machen, damit die Datenbank diese Einschränkung erzwingt. Sie können dies tun, indem Sie einen eindeutigen Index oder Einschränkung zu erstellen:

alter table data add constraint unq_data_data1 unique (data1); 

Sie können diese dann in einem insert verwenden Duplikate zu ignorieren, indem on duplicate key update mit:

INSERT INTO data(data1, data2) 
    VALUES('$_POST[data1]', '$_POST[data2]') 
    ON DUPLICATE KEY UPDATE data1 = VALUES(data1); 

Der ON DUPLICATE KEY Teil wirklich nichts tun . Es ist ein No-Op.

Außerdem sollten Sie Ihre Abfragen parametrisieren, damit Sie nicht der SQL-Injection unterliegen und die Abfragepläne zwischengespeichert werden können. Aber das ist eine andere Sache.

0

make Spalte data1 einzigartige

ALTER TABLE `data` ADD UNIQUE (`data1`); 

Änderung wie diese Ihre Abfrage einfügen zu ignorieren, wenn Daten

$query = "INSERT IGNORE INTO data(data1, data2) VALUES('$_POST[data1]', '$_POST[data2]')"; 
Verwandte Themen