Usereingabe in SQL DB prüfen

madmix

Grünschnabel
Hallo Leute
Ich hoffe mir kann hier geholfen werden !
Ich möchte auf meiner Website dem User die Möglichkeit zur kostenlosen Registrierung geben.
Hierbei soll überprüft werden ob der eingegebene Nutzername bereits in der DB vorhanden ist.
Mein Script zur realisierung dieser Aktion irgenwie nicht so recht.
Weiß jemand von euch wie ich das umsetzten kann ?
Hier mein Codeschnippsel :

#
# Prüfen ob der USERNAME bereits in der DB vorhanden ist
# username1 wird vom HTML-Formular übergeben

$sql = "SELECT * FROM usertable WHERE username=?";
if($sql==$username1)
{
echo "<center><font class=ueber1>Der eingebgebene Nutzername existiert bereits, bitte neu wählen </font></center><br>\n";
echo"<br><center><a class=link href=anmeldung1.htm>Zurück</a></center>";
}

Wäre echt dankbar für Hilfe
Gruß Mad
 
Hi

Also wenn du mich fragst, ich würde das so lösen:
PHP:
$sql = mysql_query("SELECT * FROM usertable WHERE username=$username1");
if(mysql_num_rows($sql) > 0) {
echo "Benutzername existiert bereits!";
} else {
echo "Alles roger! :o)";
}
Vorsicht, Code ist ungetestet!
 
Original geschrieben von madmix
Mein Script zur realisierung dieser Aktion irgenwie nicht so recht.
Klar, dein Code ist ja auch alles andere als richtig ;)

Also, gehen wir mal davon aus, dass in Deinem HTML-Formular u.a. dieses Formular-Felder ist:

Code:
<input type="text" name="username" />
So, und jetzt werden die Formular-Werte per POST (Weiterleitungsart, welche die Werte aus dem Formular intern über den Browser weitertransportiert. Alternative zu GET, welche die Formulareingaben über die URL an ein Script weitergibt) an ein PHP Script weitergegeben, welches die Eingaben prüft. Das sieht ungefähr so aus:

PHP:
$strSQL = "SELECT * FROM usertabelle WHERE username = '".$_POST['username']."'";
$rsUser = mysql_query(mysql_escape_string($strSQL));

if(mysql_num_rows($rsUser) > 0) {
    /* vorhanden */
} else {
    /* kein username vorhanden */
}
Also, erstmal wählst Du aus der Datenbank den User aus, wo der Username mit den Usereingaben übereinstimmt, aus. Die PHP Variable stammt aus dem $_POST-Array, welches PHP automatisch zur Verfügung stellt. Als Index wird hier genau die gleichen Bezeichnung erwartet, die Du auch in Deinem HTML-Formular als Element-Namen verwendet hast.

Im nächsten Schritt wird die SQL-Anweisung an die Datenbank abgeschickt, da wir ja bis jetzt lediglich einen normalen String erstellt haben. Du solltest aber dran denken, dass man NIEMALS Werte, die von außerhalb des Scriptes kommen (in diesem Falle die Eingaben vom User) direkt in Deine SQL-Anweisung einbinden solltest. Das stellt eine erhebliche Sicherheitslücke dar. Deswegen wird die SQL-Anweisung bevor sie an die Datenbank abgeschickt wird, nocheinmal dementsprechend formatiert, so dass, falls der User gefährlichen Code in das Script bringen wollte (Stichwort: SQL-Injections), diese Eingaben unschädlich gemacht werden.

So, jetzt befindet sich in der Variablen $rsData das Abfrageergebnis bzw. keins, wenn kein User gefunden wurde, der mit den angeforderteten Daten übereinstimmt. Dies stellen wir mit der Funktion mysql_num_rows() fest: Sofern die Ergebnissmenge größer 0 ist, wurde ein Datensatz gefunden und der User kann auf die geschützte Seite weitergeleitet werden. Andernfalls kann eine Fehlermeldung ausgegeben werden.

** edit **

Ok, vergiss das mit dem Passwort, hatte nich genau gelesen ;)

** /edit **
 
Zuletzt bearbeitet:
Re:

Sorry Leute
Hab beide Anregungen mal eingebaut und getestet, geht aber beides nicht so recht.
Die IF-Anweisung wird nach dem ELSE ausgeführt (trotz gleichem Usernamen wird OK angezeigt und die Eingaben werden in die DB geschrieben).
Nochmal etwas genauer wie ich die Eingaben übergebe :
In meinem HTML Formular wird das Feld <name=username1> per submit an das PHP-Script übergeben.
In die DB wird dieser Parameter mit
$sql = "INSERT INTO usertable(username) VALUES ('$username1')";
geschrieben.
Nun will ich per SELECT das Feld username aus der DB auslesen und mit dem Parameter $username1 vergleichen.
Sind die Daten gleich dann soll eine Fehlermeldung ausgegeben werden.

Gruß Mad
 
Hi

Ich würde mal überprüfen, ob die Daten überhaupt in der Tabelle vorhanden sind und ob $username1 auch wirklich das beinhaltet, was es beinhalten soll: Füg am besten am Anfang des Scripts einfach mal folgende Zeile ein:
PHP:
echo "\"$username1\"";
Wenn du dann nur zwei Gänsefüsschen siehst, dann weisst du, dass irgendwas bei der Übertragung schief gegangen ist - wenn da jedoch etwas drin steht, dann muss der Fehler weiter unten sein.

P.S.: Sowas nennt man Debugging. ;)
 
Zurück