7 Stimmen

Verhinderung des Einfügens doppelter Zeilen in php/mysql

Wie verhindert man die Eingabe von doppelten Datensätzen in php mysql? Validierung der Eingabe vor dem Einfügen in die Tabelle.

Ich baue gerade einen Abschnitt zur Benutzerregistrierung für meine Website auf, möchte aber eine Fehlermeldung ausgeben, wenn ein doppelter Benutzername oder eine doppelte E-Mail-Adresse in der Datenbank gefunden wird.

EDIT
Dies ist, was ich zu weit haben, um Zeilen einfügen... wie würde ich beide Antworten hier implementieren:

  <?php
        if (array_key_exists('confirm',$_POST)) {

                $Cuser = $_POST['Cuser']; 
                $Cemail = $_POST['Cemail']; 
                $Cpassword = $_POST['Cpassword'];
                $md5password = md5($_POST['Cpassword']);

                mysql_query("INSERT INTO tbl_users (`username`,`email`,`password`)
VALUES ('$Cuser', '$Cemail', '$md5password')"); 

                echo "Thank you. The user <b>".$Cuser."&nbsp;(".$Cemail.")</b> has been successfully added to the database.<p>

                <a href='myaccount.php' class='form'>Return</a>";       

                exit;
        }
        ?>

Ich vermute, dass ich das alles in einer if...else-Anweisung implementieren könnte?

17voto

OMG Ponies Punkte 312816

Definieren Sie eindeutige Beschränkungen für die Spalten Benutzername und E-Mail:

ALTER TABLE your_table ADD CONSTRAINT uk_username UNIQUE (username)
ALTER TABLE your_table ADD CONSTRAINT uk_email UNIQUE (email)

Wenn der Wert, der eingefügt oder aktualisiert werden soll, bereits in der Tabelle vorhanden ist, gibt MySQL eine Fehlermeldung aus, die besagt, dass die Abfrage die entsprechende eindeutige Einschränkung (möglicherweise beide) verletzt. Es liegt an Ihnen, PHP so einzurichten, dass es dies korrekt behandelt.

3voto

Jesse Millikan Punkte 3054

Führen Sie vor dem Einfügen eine SQL-Anweisung aus, etwa wie

SELECT * FROM users WHERE users.name = :name OR users.email = :email

(mit parametrisiertes SQL ) und zählen die Anzahl der zurückgegebenen Zeilen.

Wenn es mehr als 0 sind, gibt es ein Duplikat.

OMG Ponies schlug Beschränkungen für diese beiden Felder vor, was ebenfalls eine sehr gute Idee ist, um zu verhindern, dass Sie einen Fehler in der Datenbank machen. Wenn Sie jedoch ein Duplikat einfügen, ist alles, was diese Einschränkung Ihnen bringt, eine Datenbankfehlermeldung, die Sie analysieren können oder auch nicht wollen.

2voto

methuselah Punkte 11934

Ich habe die Sql-Anweisung zusammen mit einer if else-Anweisung verwendet.

mysql_select_db($database_speedycms, $speedycms);
$query_usercheck = "SELECT * FROM tbl_users WHERE username='$user' OR email='$email'";
$usercheck = mysql_query($query_usercheck, $speedycms) or die(mysql_error());
$row_usercheck = mysql_fetch_assoc($usercheck);
$totalRows_usercheck = mysql_num_rows($usercheck);

dann

if ( $totalRows_usercheck > 0 )

eine Fehlermeldung anzeigen, um zu verhindern, dass Duplikate hinzugefügt werden

andernfalls Einfügen in die Datenbank erlauben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X