Überprüfen ob --> User bereits besteht
habbohighs
- php
2 Vinzenz Mai0 Tom
Ich habe ein registrierungsscript, dass eigentlich als solches funktionniert.
Aber ich möchte noch abfragen ob ein User bereits besteht.
Hier mal meine datei (PHP)
//Start Code:\
<?php session_start ();
//Daten ermitteln mit "$_POST"
$nickname =($_POST["nickname"]);
$kennwort =($_POST["kennwort"]);
$nachname =($_POST["nachname"]);
$vorname =($_POST["vorname"]);
$alte =($_POST["alte"]);
$ort =($_POST["ort"]);
$plz =($_POST["plz"]);
//Daten formatieren
$benutzer[$nickname]["Nickname"] = "$nickname";
$benutzer[$nickname]["Kennwort"] = "$kennwort";
$benutzer[$nickname]["Nachname"] = "$nachname";
$benutzer[$nickname]["Vorname"] = "$vorname";
$benutzer[$nickname]["Alte"] = "$alte";
$benutzer[$nickname]["Ort"] = "$ort";
$benutzer[$nickname]["Plz"] = "$plz";
$benutzer[$nickname]["Aktiv"] = '1';
// Aufbau der Datenbankverbindung
$connectionid = mysql_connect('localhost','phostXXX','PW' );
if (!mysql_select_db ("phostXXX", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}
//Überprüfen ob benutzername bereiz besteht
$sql = "SELECT COUNT(*) FROM benutzerdaten WHERE nickname = '$nickname' and kennwort = '$kennwort'";
list( $num ) = mysql_fetch_array( mysql_query( $sql ) );
if ( $num )
{
echo "Dieser Username existiert bereits!";
}
else
{
// Daten eintragen
while (list ($key, $value) = each ($benutzer))
{
// SQL-Anweisung erstellen
$sql = "INSERT INTO ".
"benutzerdaten (nickname, kennwort, nachname, vorname, alte, ort, plz, aktiv) ".
"VALUES ('".$value["Nickname"]."', '".
md5 ($value["Kennwort"])."', '".
$value["Nachname"]."', '".
$value["Vorname"]."', '".
$value["Alte"]."', '".
$value["Ort"]."', '".
$value["Plz"]."', '".
$value["Aktiv"]."')";
//Daten an die DB schicken
mysql_query ($sql);
if (mysql_affected_rows ($connectionid) > 0)
{
echo "Benutzer erfolgreich angelegt. Du kannst dich nun Einloggen.</a>";
}
else
{
echo "Leider ist ein Fehler beim Anlegen der Benutzer aufgetreten. Versuchen Sie es doch noch einmal.";
}
}
}
?>
//End Code\
Häbt ihr ne Lösung?
Denn offenbahr gibt das Script(egal was ich beim Formular vorher eingebe)immer TRUE aus. Aber das will ich ja verhindern.
Hallo
Ich habe ein registrierungsscript, dass eigentlich als solches funktionniert.
Aber ich möchte noch abfragen ob ein User bereits besteht.
das ist überflüssig, wenn man es geschickt anstellt.
//Daten ermitteln mit "$_POST"
$nickname =($_POST["nickname"]);
$kennwort =($_POST["kennwort"]);
$nachname =($_POST["nachname"]);
$vorname =($_POST["vorname"]);
$alte =($_POST["alte"]);
$ort =($_POST["ort"]);
$plz =($_POST["plz"]);
da die Daten in der Variablen $_POST enthalten sind, ist ein Umkopieren völlig überflüssig und verschleiert nur die Herkunft der Daten.
//Daten formatieren
$benutzer[$nickname]["Nickname"] = "$nickname";
$benutzer[$nickname]["Kennwort"] = "$kennwort";
$benutzer[$nickname]["Nachname"] = "$nachname";
$benutzer[$nickname]["Vorname"] = "$vorname";
$benutzer[$nickname]["Alte"] = "$alte";
$benutzer[$nickname]["Ort"] = "$ort";
$benutzer[$nickname]["Plz"] = "$plz";
$benutzer[$nickname]["Aktiv"] = '1';
Aha, nun werden die Daten noch ein weiteres Mal kopiert. Noch überflüssiger.
,[...]
//Überprüfen ob benutzername bereiz besteht
$sql = "SELECT COUNT(*) FROM benutzerdaten WHERE nickname = '$nickname' and kennwort = '$kennwort'";
Diese Anweisung enthält gleich mehrere Fehler:
a) verläßt Du Dich anscheinend auf die Magic Quotes.
Dieses dämliche Feature wird hoffentlich bald aus PHP verschwinden.
Stattdessen solltest Du die Funktion mysql_real_escape_string() verwenden,
um die Daten entsprechend dem Kontext, hier MySQL, zu behandeln,
gegebenenfalls - wie im Handbuch beschrieben - vorher stripslashes() auf
die Daten anwenden.
b) könnte es sein, dass jemand einen bestehenden Nick ausgewählt hat, aber
natürlich ein anderes Kennwort gewählt hat. Dann wird das Ergebnis 0 sein,
obwohl der Benutzername bereits vorhanden ist.
c) ist das sowieso überflüssig, wenn Du einen eindeutigen Index auf die Spalte
nickname setzt.
Versuche dann ein INSERT der neuen Daten.
Wenn es erfolgreich ist,
Gebe dem Benutzer positive Rückmeldung
Sonst
Wenn Schlüsselverletzung vorliegt
Sage dem Benutzer, dass der Nick bereits vergeben ist
Sonst
Gebe die allgemeine Fehlermeldung aus
Ende Wenn
Ende Wenn
Freundliche Grüße
Vinzenz
Hello,
c) ist das sowieso überflüssig, wenn Du einen eindeutigen Index auf die Spalte
nickname setzt.
Es ist nicht nur überflüssig, sondern so auch falsch, denn es erzeugt eine nicht behandelte Race Condition (TOCTOU-Problem).
Ein harzliches Glückauf
Tom vom Berg