als Fortsetzung auf den Thread "Sicherer Login" folgt jetzt natürlich "Sichere Registrierung ;) Erstmal möchte ich ganz ohne Code wissen, was ihr denkt, was man beachten sollte? Das können zum
Beispiel Angaben zum Passwort sein oder so was...
Der Code ist natürlich auch wichtig. Falls es jemanden interessiert: Für diesen Code habe ich 15 Minuten gebraucht.
- Code: Alles auswählen
<?php
include("oben.php");
$string = "";
if(isset($_SESSION["c1l2o3u4d-userid"])) {
header("Location:index.php");
}
elseif(isset($_POST["submit-register"])) {
if($_POST["nickname"] !== "" AND $_POST["password"] !== "" AND $_POST["password2"] !== "" AND $_POST["firstname"] !== "" AND $_POST["surname"] !==
"" AND $_POST["purpose"] !== "") {
$connection = mysql_connect("localhost", "yamram-dev", "********");
if (!mysql_select_db ("yamram-dev", $connection)) {
$string = $string."<p class='error'>Ein Datenbankfehler ist aufgetreten. Wir werden uns schnellstmöglichst darum kümmern.<span class='result'>Bitte
haben Sie Verständnis.</span></p>";
}
$nickname = mysql_real_escape_string($_POST["nickname"]);
$password = mysql_real_escape_string($_POST["password"]);
$password2 = mysql_real_escape_string($_POST["password2"]);
$firstname = mysql_real_escape_string($_POST["firstname"]);
$surname = mysql_real_escape_string($_POST["surname"]);
$purpose = mysql_real_escape_string($_POST["purpose"]);
$sql = "SELECT * FROM `user` WHERE `nickname` = '".$nickname."';";
$result = mysql_query($sql);
if(mysql_fetch_assoc($result)) {
$string = $string."<p class='error'>Der Username ist schon vorhanden.<span class='result'>Bitte wählen Sie einen anderen
Usernamen.</span></p>";
}
elseif($password == $password2) {
$sql = "INSERT INTO `user` (`nickname`, `password`, `regdate`, `surname`, `firstname`) VALUES ('".$nickname."', '".md5($password)."',
CURRENT_TIMESTAMP , '".$firstname."', '".$surname."');";
if(mysql_query($sql)) {
$string = $string."<p class='error'>Ein Problem mit der Datenbank ist aufgetreten.<span class='result'>Bitte haben Sie
Verständnis.</span></p>";
}
else {
$sql = "SELECT * FROM `user` WHERE `nickname` = '".$nickname."';";
$result = mysql_query($sql);
$sql = "INSERT INTO `logs` (`nickname`, `class`, `logdate`, `ip`) VALUES ('".$nickname."', 'register', CURRENT_TIMESTAMP, '".
$_SERVER["REMOTE_ADDR"]."')";
}
header("Location:index.php?error=7");
}
else {
$string = $string."<p class='error'>Die Passwortbestätigung entspricht nicht dem Passwort.<span class='result'>Bitte versuchen Sie es noch
einmal.</span>";
}
}
else {
$string = $string."<p class='error'>Sie konnten nicht registriert werden, weil Sie nicht alle Daten eingegeben haben.<span class='result'>Bitte versuchen Sie es
noch einmal.</span></p>";
}
}
?>
<h2>Registrieren</h2>
<?php echo $string; ?>
<p>Hier können Sich registrieren. Dafür müssen Sie einfach alle Felder ausfüllen:</p>
<form method="post" action="">
<label for="nickname">Username</label> <input type="text" name="nickname" value="<?php echo @$_POST["nickname"]; ?>" />
<label for="password">Passwort</label> <input type="password" name="password" value="" />
<label for="password2">Password bestätigen</label> <input type="password" name="password2" value="" />
<label for="firstname">Vorname</label> <input type="text" name="firstname" value="<?php echo @$_POST["firstname"]; ?>" />
<label for="surname">Nachname</label> <input type="text" name="surname" value="<?php echo @$_POST["surname"]; ?>" />
<label for="purpose">Zweck</label>
<select name="purpose">
<option value="business">geschäftlich</option>
<option value="private">privat</option>
</select>
<input type="submit" value="registrieren" name="submit-register" />
</form>
<?php include("unten.php"); ?>
So, was kann ich an diesem Code besser machen? Auf Empfehlung von drPHIP132 habe ich jetzt direkt mysql_real_escape_string() eingebaut. Das schützt vor SQL Injection habe ich erfahren. Wie
ihr vielleicht schon gesehen habt, braucht der User nicht mal eine eMail Adresse angeben. Wer sagt, dass das eine doofe bzw. schlechte Idee ist, der soll direkt Bescheid sagen und natürlich auch
warum.
Mit freundlichen Grüßen,
Philipp E.
PS: Das Projekt macht echt Fortschritte. Bald habe ich das komplette Usersystem fertig und fange mit dem Uploadsystem an O.o

