Ich versuche zu verhindern, dass Benutzer auf einer Website, an der ich arbeite, doppelte E-Mail-Adressen haben. Dies ist die Methode, die ich bin mit:PHP/MYSQL Doppelte E-Mail-Adresse
function createUser($emlAd)
{
$sql = "SELECT FROM Users WHERE email='$emlAd'" ;
$result = mysql_query($sql) ;
if(mysql_num_rows($result) > 0)
{
die("There is already a user with that email!") ;
}//end if
//rest of function
}//end createUser
Dieser Code erreicht nicht ihre Aufgabe, und der Benutzer ist noch in der Lage ein Konto bei einer bereits verwendeten E-Mail zu erstellen. Das Seltsame ist, dass, wenn ich die, wenn die Bedingung zu ändern:
mysql_num_rows($result) == 0
Der Benutzer nicht in der Lage ist, ein Konto mit einem beliebigen E-Mail-Adresse zu erstellen. Warum übergibt der Code die Kontrolle nicht an den if-Block, wenn die Anzahl der Zeilen größer als 0 ist?
Versuchen Sie, $ sql vor der Ausführung auszugeben, und sehen Sie, ob Sie dadurch einen besseren Hinweis darauf bekommen, warum es keine Ergebnisse gibt. – Naatan
Stellen Sie sicher, dass Sie sich "mysql_real_escape_string" ansehen. Es ist etwas, an das Sie sich früher gewöhnen sollten. –
Haben Sie überprüft, dass die Abfrage tatsächlich erfolgreich war? $ result wird Boolean FALSE sein, wenn ein Problem aufgetreten ist, und der Aufruf von mysql_num_rows wird fehlschlagen und ebenfalls false zurückgeben, was zu typecast auf 0 führt, was zu einer '(0> 0) 'Prüfung führt und der Benutzer einsteigt. –