Admin Passwort prüfen & User Klasse erstellen
Das Login-Formular für den Admin ist fertig. Der Admin ist auch schon in der Datenbank angelegt. Fürs Login fehlt also nur noch das Passwort zu Prüfen und den User als eingeloggt zu markieren. Heute werden wir erstmal das Passwort prüfen.
Hierfür gibt es eine neue Klasse in system/classes: Die Klasse User (Datei user.php). Sie heißt nicht Admin, damit sie später evtl. zu einem Login-System für alle Benutzer umgestellt werden kann. In der ersten Version des CMS soll es aber lediglich für den Admin sein.
Die Klasse hat die Property name, in welcher der Benutzername festgelegt wird. Die Methode checkPassword, prüft ob das übergebene Passwort korrekt ist:
<?PHP class User{ var $name; function checkPassword($password){ global $dbpraefix; $password = mysql_real_escape_string(trim($password)); $name = mysql_real_escape_string(trim($this->name)); $res = mysql_query("SELECT COUNT(*) FROM ".$dbpraefix."user WHERE name='".$name."' AND password = '".md5($password)."'"); $row = mysql_fetch_row($res); return $row[0] == 1; } } ?>
Als erstes werden in der Methode die äußeren Leerzeichen von Usernamen und Passwort entfernt. Mit mysql_real_escape_string wird verhindert, dass ein Hacker sich mit einer SQL-Injection Zugriff zur Datenbank verschaffen kann. Danach wird einfach nachgesehen, ob ein Datensatz mit dem Usernamen und dem MD5 Hash vorhanden ist. Zurückgegeben wird true, wenn ein Datensatz vorhanden ist. Anderenfalls gibt es ein false.
Um die Methode zu testen, wird im Login-Formular des Admin(admin/index.php) einfach nur getestet, ob das eingegebene Passwort korrekt ist:
<?PHP include("../system/dbconnect.php"); include("../system/settings.php"); include("../system/classes/user.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml/" xml:lang="de"> <head> <title>Admin-Bereich</title> </head> <body> <?PHP if($_POST['user']){ $user = new User(); $user->name = $_POST['user']; if($user->checkPassword($_POST['password'])){ echo "<p>Passwort korrekt!</p>"; } else{ echo "<p>Falsches Passwort!</p>"; } } ?> <form action="index.php" method="post"> Benutzer: <input name="user" /><br /> Passwort: <input name="password" type="password"><br /> <input type="submit" value="Login" /> </form> </body> </html>
Es mussten oben zwei zusätzliche Includes ergänzt werden, um Datenbankzugriff zu haben. Der letzte Include ist für die Klasse User, die wir eben erstellt haben.
Sollte alles geklappt haben, könnt ihr nun die Seite aufrufen, und testen, ob euer Passwort korrekt ist.
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Kommentare
Sven schrieb am 15.08.2011:
Um einen unerwünschten Notice zu vermeiden würde ich noch isset in die if bedingung einfügen also: if(isset($_POST['user']))... ... ... MfG
Stefan Wienströer schrieb am 16.08.2011:
Da muss ich dir Recht geben. Wurde später auch so geändert ;-)
Maximilian schrieb am 28.09.2011:
Super Tutorial, aber da ist ein Druckfehler. Ich denke es soll nicht SQL-Injedktion sondern SQL-Injektion heißen.
Stefan Wienströer schrieb am 29.09.2011:
Ups^^ Habs geändert.
Über uns

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project