Datenbankbasiertes Login-System mit PHP
Im Internet sind sie ja mittlerweile - speziell bei kommerziellen Angeboten wie Ebay, Amazon oder auch Partnervermittlungen - nicht mehr wegzudenken. Es ist weit verbreitet, dass Anbieter von webbasierten Anwendungen Login und Passwort für ihre Nutzer verwenden.Der folgende Artikel soll ein Beispiel eines kompletten Loginsystems mit der Registrierung eines Nutzers, dem Login selbst und dem Bereich "Passwort vergessen" für webbasierte Anwendungen vorstellen.
Registrierung
Bevor ein Nutzer eine Anwendung, die mit einem Login-System arbeitet, nutzen kann, muss dieser dem System erstmal seine Daten mitteilen - mit anderen Worten: Er muss sich registrieren. Bei der Registrierung werden alle persönlichen Informationen, die zur Nutzung der Anwendung notwendig sind, in der Datenbank gespeichert. Das folgende Skript zeigt eine Registrierung mit den folgenden persönlichen Informationen: Name, Vorname, Emailadresse, Login und Passwort<?
$db_server = 'xxx';
$db_name = 'nutzer';
$db_user = 'xxx';
$db_passwort = 'xxx';
@mysql_connect($db_server,$db_user,$db_passwort);
mysql_select_db($db_name);
if(!isset($_POST['sub1']) || empty($_POST['sub1']))
{
print('<form action="" method="post">
Name: <input type="text" name="nachname"><br>
Vorname: <input type="text" name="vorname"><br>
E-Mail: <input type="text" name="email"><br>
Loginname: <input type="text" name="kennung"><br>
Paßwort: <input type="password" name="passwort"><br><br>
<input type="submit" name="sub1" value="LOGIN">
</form>');
}
else if($_POST['sub1'] == 'LOGIN')
{
$check = mysql_db_query('nutzer','SELECT user FROM teilnehmer
WHERE user="'.$_ POST['kennung'].'"');
$anzeige = mysql_fetch_row($check);
if($anzeige[0] == $_ POST['kennung'])
{
print('<script language="Javascript">
alert("Die eingegebene Kennung ist bereits vorhanden");
</script>');
}
else
{
if(!empty($_POST['passwort']) && !empty($_POST['login']))
{
print('<script language="Javascript">
alert("Ihre Daten wurden übernommen");
</script>');
$pers = mysql_db_query("nutzer",'INSERT INTO teilnehmer
(user, nachname, vorname, email) VALUES
("'.$_POST['kennung'].'","'.$_POST['$nachname'].'","'.
$_POST['$vorname'].'","'.$_POST['$email'].'")');
$login = mysql_db_query("nutzer",'INSERT INTO login
(username, passwort, registrierung) VALUES
("'.$_POST['kennung'].'","'.$_POST['passwort'].'",NOW())');
}
else
{
print('<script language="Javascript">
alert("Ihre Daten konnten nicht übernommen werden");
</script>');
}
}
}
}
?>
Wenn die eingegebene Kennung noch nicht vorhanden ist, werden die persönlichen Daten in der Datenbank gespeichert und danach eine Meldung ausgegeben.
Allgemeines zur Datenbank
Alle notwendigen Informationen werden im Beispielsystem in der Datenbank "nutzer" mit den Tabellen "teilnehmer" und "login" gespeichert. Um die Datenbank anzulegen, sind in MySQL folgende Befehle notwendig:create database nutzer;
use nutzer;
create table teilnehmer (username TEXT, name TEXT,
vorname TEXT, email TEXT);
create table login (username TEXT, passwort TEXT,
registrierung DATETIME);
Das Loginsystem
Will sich ein Nutzer für die Anwendung einloggen, muss er seinen Benutzernamen und sein Passwort eingeben. Die Daten werden dann mit den Informationen in der Datenbank verglichen werden und entsprechend ausgewertet. Fällt dieser Vergleich positiv aus, steht die Anwendung dem Nutzer zur Verfügung - ansonsten bekommt er nur eine Fehlermeldung angezeigt. Dies ist aber nur die "Basis" eines Logins.Im Folgenden wird ein Beispielskript gezeigt, mit dem das "Basislogin" realisiert werden kann.
<?
$db_server = "xxx";
$db_name = "nutzer";
$db_user = "xxx";
$db_passwort = "xxx";
@mysql_connect($db_server,$db_user,$db_passwort);
mysql_select_db($db_name);
$user = '';
$pass = '';
if(isset($_COOKIE['username'])){$user = $_COOKIE['username'];}
if(isset($_COOKIE['passwort'])){$pass = $_COOKIE['passwort'];}
if(isset($_POST['username'])){$user = $_POST['username'];}
if(isset($_POST['passwort'])){$pass = $_POST['passwort'];}
if($user != '')
{
$pruefung = mysql_db_query("nutzer",'SELECT passwort FROM login
WHERE username="'.$user.'"');
$ausgabe = mysql_fetch_row($pruefung);
if($pass != $ausgabe[0])
{
echo '<p>Username und Passwort stimmen nicht überein.</p>';
$user = '';
}
else
{
setcookie("username", $user, time()+3600);
setcookie("passwort", $pass, time()+3600);
}
}
if($user = '')
{
print('<form action="login.php" method="post">
Login: <input type="text" name="username"><br>
Passwort: <input type="password" name="passwort"><br><br>
<input type="submit" name="sub1" value="LOGIN">
</form>');
exit;
}
?>
Stimmen die Informationen aus der Datenbank nicht mit dem eingegebenen Usernamen und Login überein, wird der Vorgang automatisch abgebrochen und stattdessen ein Loginformular angezeigt.
Das Login-Skript einsetzen
Zum Einsatz kommt das Login-Skript ganz einfach indem es als normale PHP-Datei gespeichert wird. Alle (PHP-)Dateien die dann mit einem Login geschützt werden sollen, brauchen dann lediglich um folgende Zeile erweitert werden:<? include('loginskript.php'); ?>
... vorausgesetzt man hat das Skript als loginskript.php im gleichen Verzeichnis gespeichert.Speichern der Login-Versuche
Nachdem jetzt das Basis-Login für die Anwendung funktioniert, ist es sinnvoll, die Anzahl der Login-Versuche zu protokollieren. Der Hintergrund dahinter ist es, automatisiertes Abfragen des Logins zu verhindern: Ohne eine Überprüfung der Loginversuche könnte ein Eindringling einfach alle möglichen Kombinationen ausprobieren und würde so früher oder später auch das richtige Passwort finden. Um das zu verhindern wird nach einer bestimmten Anzahl von Fehlversuchen der Zugang für den Nutzer einfach gesperrt wird.Zunächst muss dazu unsere bestehende Tabelle "login" in der Datenbank um zwei Spalten erweitert werden. Eine Spalte dient zum Speichern der Fehlversuche beim Login und in der zweiten neuen Spalte wird festgehalten, ob der Zugang gesperrt ist. Der zum Ändern nötige SQL-Befehl sieht so aus:
ALTER TABLE login ADD COLUMN (versuche INT(1) DEFAULT "0"
NOT NULL, sperre DATETIME);
...
if($user != '')
{
$pruefung = mysql_db_query("nutzer",'SELECT passwort FROM login
WHERE username="'.$user.'" AND
TO_DAYS(sperre) <> TO_DAYS(NOW())');
$ausgabe = mysql_fetch_row($pruefung);
if($pass != $ausgabe[0])
{
mysql_db_query("nutzer",'UPDATE login SET versuche = versuche+1
WHERE username="'.$user.'"')
$pruefung = mysql_db_query("nutzer",'SELECT versuche FROM login
WHERE username="'.$user.'"');
$ausgabe = mysql_fetch_row($pruefung);
if((int)$ausgabe[0] > 3)
{
mysql_db_query("nutzer",'UPDATE login SET versuche = 0,
sperre = NOW()
WHERE username="'.$user.'"');
echo '<p>Sie haben mehr als 3 Loginversuche benötigt, der
Account wird für heute gesperrt.</p>';
}
echo '<p>Username und Passwort stimmen nicht überein.</p>';
$user = '';
}
else
{
setcookie("username", $user, time()+3600);
setcookie("passwort", $pass, time()+3600);
}
}
...
Passwort vergessen?
Wenn man für die Web-Anwendung das Passwort vergessen hat, kann sich der Nutzer dies per E-Mail zuschicken lassen. Er muss dazu einen eindeutigen Parameter eingeben, damit eine klare Zuordnung zu seiner Person möglich ist. Dieser Parameter kann zum Beispiel die Nutzerkennung, der richtige Name oder die Email-Adresse sein.Ein Skript, basierend auf der Eingabe der E-Mail-Adresse, welches dem Nutzer automatisch sein Passwort zuschickt, sieht zum Beispiel so aus:
<?
$db_server = "xxx";
$db_name = "nutzer";
$db_user = "xxx";
$db_passwort = "xxx";
@mysql_connect($db_server,$db_user,$db_passwort);
mysql_select_db($db_name);
if(!isset($_GET['name']) || empty($_GET['name']))
{
print('<form action="vergessen.php" method="post">
Loginname: <input type="text" name="name"><br>
<input type="submit" value="Passwort zuschicken">
</form>');
}
else
{
$addr=mysql_db_query("nutzer",'SELECT email FROM teilnehmer
WHERE username="'.$_GET['name'].'"');
$mail=mysql_fetch_row($addr);
$pruefung=mysql_db_query("nutzer","SELECT passwort FROM login
WHERE username="'.$_GET['name'].'"');
$ausgabe=mysql_fetch_row($pruefung);
mail($mail[0], 'Passwort für Webanwendung xyz',
'Ihr Passwort lautet: '.$ausgabe[0].'');
}
?>
Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.
Weiterlesen: ⯈ YouTube API – Videos suchen
Über uns

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