2011-01-16 7 views
0

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?

+0

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

+0

Stellen Sie sicher, dass Sie sich "mysql_real_escape_string" ansehen. Es ist etwas, an das Sie sich früher gewöhnen sollten. –

+0

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. –

Antwort

2

starten:

SELECT * FROM ... (man beachte das Sternchen nach SELECT) .. Ich glaube nicht, dass Sie alle Datensätze aufrufen (außer der erste Datensatz in Users), so wie Sie ihn ausführen. Ich könnte mich irren, aber es trotzdem versuchen.

+0

Es sieht offensichtlich aus, wenn Sie darauf hinweisen :-). +1 für dich. –

+0

Das ist in der Tat ein dummer Fehler. Vielen Dank! –

+0

Willkommen :) Danke. – OldWest

0

Es sieht so aus, als ob Sie nie eine Übereinstimmung in E-Mails erhalten. Also

mysql_num_rows($result) == 0 

wird immer wahr sein.

versuchen

echo $sql 

zu Ihrem SQL sieht richtig stellen Sie sicher. Sie können $ emlAd nicht korrekt an create werden() über