Da hast du zwei möglichkeit, entweder das Feld auf unique setzen oder vorher ein SELECT auf den Username.
Druckbare Version
Da hast du zwei möglichkeit, entweder das Feld auf unique setzen oder vorher ein SELECT auf den Username.
Ach, den Query hatte ich mir noch garnicht angesehen.
1.)Versuch htmlentities() für Strings, damit diese konvertiert werden und XSS z.B. nicht möglich ist.PHP-Code:
'" . addslashes($_POST["password"]) . "'
Für Integer nutzt Du intval().
Außerdem solltest Du die Werte mit mysql_real_escape_string() behandeln statt mit addslashes() ;).
2.) Passwörter nicht per md5() zu verschlüsseln ist unsicher. Aber für einen Anfänger(?), der sich die Materie mal ansehen möchte, durchaus in Ordnung.
3.) Nur ein Tipp: Daten kann man lieber als Datestamp speichern.
Dann erhältst Du z.B. sowas: 1269130314.PHP-Code:
$datestamp = time();
Dieser Stempel lässt sich per
ganz leicht in 21-03-2010 umrechnen.PHP-Code:
$datum = strftime("%d-%m-%Y","1269130314");
Der Vorteil bei dieser Methode ist, dass Du den Timestamp mit strftime() in jedes beliebige Format umrechnen kannst ;).
4.) Ich sehe hier garkeine Abfrage, die prüft, ob der Username bereits vorhanden ist.
So müsste es gehen.PHP-Code:
$res = mysql_query("SELECT * FROM `members` WHERE `members`.`username` LIKE '".htmlentities($_POST['username'])."'");
$row = mysql_fetch_array($res);
if($row[0]) {
die("Der Username ist bereits vergeben!");
} else {
$sql = "INSERT INTO members
(
date,
ip,
username,
password
)
VALUES
(
'" . addslashes($_POST["date"]) . "',
'" . addslashes($_POST["ip"]) . "',
'" . addslashes($_POST["username"]) . "',
'" . addslashes($_POST["password"]) . "'
)
";
mysql_query($sql) OR die(mysql_error());
}
Was weiterhin sinnvoll wäre ist, das Datenbankfeld "username" auf "unique" zu stellen.
Wie das genau geht kann ich Dir gerade nicht sagen, da meine PHPMyAdmin-Version scheinbar sehr veraltet ist... ^^