2016-04-13 13 views
0

Ich ändere eine Webanwendung, die in PHP von einem anderen Entwickler erstellt wurde. Wenn der Benutzer derzeit ein Formular ausfüllt und einen Benutzernamen eingibt, der bereits verwendet wird, wird der MySQL-Fehler Duplicate entry 'fred' for key 'username' auf einer neuen Seite angezeigt. Ich möchte es so machen, dass eine Fehlermeldung auf der gleichen Seite angezeigt wird, also versuche ich zu überprüfen, ob der eingegebene Benutzername mit einem anderen Benutzernamen in der Tabelle übereinstimmt, aber ich kann es nicht zum Laufen bringen. Irgendwelche Gedanken?Überprüfen Sie MySQL auf doppelten Eintrag

$username_entry = ($_POST['username']); 
$username_match = mysql_query("SELECT * FROM business WHERE username='$username_entry'"); 

if (($_POST['username']) == $username_match) { 
    // do something 
} 
+0

welcher teil funktioniert nicht? –

+0

Die beste Lösung ist die, die bereits implementiert wurde. Wenn Sie einen doppelten Schlüssel für das Eingabeergebnis erhalten, können Sie eine entsprechende Fehlermeldung anzeigen. Dadurch wird sichergestellt, dass Sie nur einmal in die Datenbank zurückfahren. Wenn Sie überprüfen, ob der Benutzer existiert, bevor Sie die Einfügung vornehmen, führt dies zu 2 Rundreisen, was kostspieliger ist. Die beste Lösung, die ich für Ihr Problem sehe, ist entweder: 1. Redirect von der Fehlermeldung Seite zurück auf die aufrufende Seite und zeigen Sie den entsprechenden Fehler. 2. Verwenden Sie Ajax, um die Anforderung abzuschließen, und zeigen Sie den Fehler in dem aufrufenden Formular an. – Chris

+0

@ Chris-MayhemSoftware Ich bin ein PHP-Noob, also bin ich mir nicht sicher, wie ich eine Fehlermeldung auf diese Weise anzeigen würde. Könnten Sie das näher ausführen? –

Antwort

0

Zunächst geben Sie nichts von Ihrer Abfrage zurück, um zu überprüfen. Ich frage die Datenbank ab, um zu sehen, ob irgendwelche Zeilen mit diesem Benutzernamen zurückkehren. $ cnt ist die Anzahl der Zeilen. Wenn das also größer als Null ist, haben Sie ein Duplikat.

$username_entry = ($_POST['username']); 
    $username_match = mysql_query("SELECT count(*) FROM business WHERE username='$username_entry'"); 
    $cnt = mysql_num_rows($username_match); 

    if (($cnt > 0) { 
     // do something 
    } 
+0

Danke für Ihre Antwort. Ich erhalte den folgenden Fehler, wenn ich Ihren Code verwende ... –

+0

Warnung: mysql_fetch_array() erwartet Parameter 1 als Ressource, boolean gegeben in/Anwendungen/XAMPP/xamppfiles/htdocs/shop-local-weekly-root/arizona/anytown/_actions/addbssn.php on line 45 Warnung: mysql_num_rows() erwartet, dass Parameter 1 resource, null in/Programme/XAMPP/Xamppfiles/htdocs/shop-lokale-wöchentlich-root/arizona/anytown/_actions/addbssn gegeben ist. php on line 46 –

+0

Wenn Sie das am besten tun möchten, verwenden Sie einfach count (*), so dass Sie immer nur eine Zeile zurück bekommen. – Chris

Verwandte Themen