Zurück tutorials.de > Tutorials > Programming - Tutorials > PHP - Tutorials

 
 
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)

Themen: 242.975 | Beiträge: 1.352.293 | Mitglieder: 169.418 (Stand 28.01.10) | Fragen zur Nutzung von Tutorials.de? Nutzungsregeln | Kontaktformular | Impressum

Jubiläums-Countdown 23.02 23.03 23.04 23.05 23.06 23.07 23.08 23.09


Einladung zum C++ für Einsteiger-Workshop
  Tutorial geschlossenGeschlossen    
  Tutorial geschlossenGeschlossen    
 
Tutorial-Optionen Ansicht
[PHP/mySQL] Login-System mit Sessions
[PHP/mySQL] Login-System mit Sessions
Veröffentlicht von Karl Förster
27.12.01
aktuelle News/Nachricht [PHP/mySQL] Login-System mit Sessions

Achtung
Ich habe das Tutorial nocheinmal komplett überarbeitet, sodass es jetzt in meiner Sicht noch einfacher anzuwenden ist. Das alte Tutorial findet ihr weiter unten.


In diesem Tutorial soll es um die Erstellung eines Loginsystems mit PHP gehen. Die Daten werden mit Hilfe von Sessions zwischen den Seiten übergeben. Die Benutzerdaten soll sich das Script aus einer mySQL-Datenbank holen.


1. Anlegen der Datenbank

Legen sie zunächste bitte eine neue Datenbank mit dem Namen "LoginSystem" an. Als Grundfelder für die Datenbank benötigen Sie eigentlich nur ID, Nickname und Kennwort. Um allerdings ein Beispiel zu geben wie man mehrere Daten eines Benutzers in einer Session speichert, fügen wir noch die Felder Nachname und Vorname an um auf jeder Seite den Namen des eingeloggten Benutzers anzuzeigen.

Legen Sie als erstes eine neue Tabelle an, die "benutzerdaten" heißt. Sie können dazu folgenden SQL-Befehl nutzen:
PHP-Code:
CREATE TABLE benutzerdaten (
  
Id Int(11NOT NULL auto_increment,
  
Nickname VarChar(50NOT NULL default '',
  
Kennwort VarChar(50NOT NULL default '',
  
Nachname VarChar(50NOT NULL default '',
  
Vorname VarChar(50NOT NULL default '',
  
PRIMARY KEY (Id)


2. Einfügen von Testbenutzern in die Datenbank

Jetzt wollen wir einige Testbenutzer in die Datenbank einfügen. Da das Kennwort zusätzlich noch verschlüsselt werden soll, machen wir das mit einem Script.

PHP-Code:
<?php 
// Definition der Benutzer 
$benutzer[0]["Nickname"] ="admin"
$benutzer[0]["Kennwort"] = "admin"
$benutzer[0]["Nachname"] = "Mustermann"
$benutzer[0]["Vorname"] = "Max"

$benutzer[1]["Nickname"] = "test"
$benutzer[1]["Kennwort"] = "abc"
$benutzer[1]["Nachname"] = "Kunze"
$benutzer[1]["Vorname"] = "Martin"

// Sie können an dieser Stelle beliebig viele Benutzer anlegen. 
// Achten Sie dabei nur auf die Fortführung der Nummer. 

// Aufbau der Datenbankverbindung 
$connectionid  mysql_connect ("localhost""root"""); 
if (!
mysql_select_db ("LoginSystem"$connectionid)) 

  die (
"Keine Verbindung zur Datenbank"); 


// Zuerst alle Datensätze löschen um keine Dopplungen zu bekommen. 
mysql_query ("DELETE FROM benutzerdaten"); 

// Daten eintragen 
while (list ($key$value) = each ($benutzer)) 

  
// SQL-Anweisung erstellen 
  
$sql "INSERT INTO ".
    
"benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ".
  
"VALUES ('".$value["Nickname"]."', '".
                       
md5 ($value["Kennwort"])."', '".
                       
$value["Nachname"]."', '".
                       
$value["Vorname"]."')"
  
mysql_query ($sql); 

  if (
mysql_affected_rows ($connectionid) > 0
  { 
    echo 
"Benutzer erfolgreich angelegt.<br>\n"
  } 
  else 
  { 
   echo 
"Fehler beim Anlegen der Benutzer.<br>\n"
  } 

?>

3. Das Formular zum Eingeben der Zugangsdaten

Jetzt legen wir eine Datei an, die das Loginformular enthält. Das könnte theoretisch auch eine reine HTML-Datei sein. Wir erstellen an dieser Stelle allerdings eine PHP-Datei da bei einem falschen Passwort über dem Formular eine Meldung ausgegeben werden soll.

Bitte beachten Sie, dass für den korrekten Ablauf der Funktionen alle hier erstellten Dateien im gleichen Verzeichnis liegen müssen.

Hinweis
In diesem Tutorial soll nicht auf das Design der Seiten geachtet werden. Damit alles übersichtlich bleibt, verzichten wir auf jegliche Formatierung der Objekte.

formular.php
PHP-Code:
<?php session_start (); ?>
<html> 
<head> 
  <title>Login</title> 
</head> 

<body> 
<?php 
if (isset ($_REQUEST["fehler"])) 

  echo 
"Die Zugangsdaten waren ungültig."

?> 
<form action="login.php" method="post"> 
  Name: <input type="text" name="name" size="20"><br> 
  Kennwort: <input type="password" name="pwd" size="20"><br> 
  <input type="submit" value="Login"> 
</form> 
</body> 
</html>

4. Das Login

In dieser Datei werden die Zugangsdaten geprüft. Sind diese richtig, werden die Benutzerdaten in einer Session gespeichert und auf eine Inhaltsseite weitergeleiten, die nur zu sehen ist wenn der Benutzer eingeloggt ist.

login.php
PHP-Code:
<?php 
// Session starten
session_start ();

// Datenbankverbindung aufbauen 
$connectionid mysql_connect ("localhost""root"""); 
if (!
mysql_select_db ("LoginSystem"$connectionid)) 

  die (
"Keine Verbindung zur Datenbank"); 


$sql "SELECT "
    
"Id, Nickname, Nachname, Vorname "
  
"FROM "
    
"benutzerdaten "
  
"WHERE "
    
"(Nickname like '".$_REQUEST["name"]."') AND "
    
"(Kennwort = '".md5 ($_REQUEST["pwd"])."')"
$result mysql_query ($sql); 

if (
mysql_num_rows ($result) > 0

  
// Benutzerdaten in ein Array auslesen. 
  
$data mysql_fetch_array ($result); 

  
// Sessionvariablen erstellen und registrieren 
  
$_SESSION["user_id"] = $data["Id"]; 
  
$_SESSION["user_nickname"] = $data["Nickname"]; 
  
$_SESSION["user_nachname"] = $data["Nachname"]; 
  
$_SESSION["user_vorname"] = $data["Vorname"]; 

  
header ("Location: intern.php"); 

else 

  
header ("Location: formular.php?fehler=1"); 

?>

5. Überprüfung des Loginstatus für die Inhaltsseiten

Diese Datei soll dafür sorgen, dass bei jedem Aufruf einer Seite die Daten in der Session überprüft werden. Bemerkt das Script, dass ein Benutzer eingeloggt ist wird der Inhalt der Seite ausgegeben. Ist dies nicht der Fall wird der Benutzer auf das Loginformular umgeleitet.

checkuser.php
PHP-Code:
<?php 
session_start 
(); 
if (!isset (
$_SESSION["user_id"])) 

  
header ("Location: formular.php"); 

?>
Diese Datei wird nicht direkt aufgerufen, sondern per include() am Anfang jeder Seite eingefügt. Wie das funktioniert sehen sie im nächsten Punkt.


6. Die interne Datei

Jetzt wollen wir die Seite erstellen, die nur angezeigt wird wenn der Benutzer eingeloggt ist. Auf dieser Seite sollen die Benutzerdaten wieder ausgegeben werden. Ist der Benutzer nicht eingeloggt wird er automatisch durch die eingefügte Datei auf das Loginformular weitergeleitet.

intern.php
PHP-Code:
<?php 
include ("checkuser.php"); 
?> 
<html> 
<head> 
  <title>Interne Seite</title> 
</head> 
<body> 
  BenutzerId: <?php echo $_SESSION["user_id"]; ?><br> 
  Nickname: <?php echo $_SESSION["user_nickname"]; ?><br> 
  Nachname: <?php echo $_SESSION["user_nachname"]; ?><br> 
  Vorname: <?php echo $_SESSION["user_vorname"]; ?> 
  <hr> 
  <a href="logout.php">Ausloggen</a> 
</body> 
</html>

7. Das Logout

Ganz zum Schluss wollen wir noch schnell die Datei für die Logout-Funktion schreiben. Diese Datei löscht die Inhalte der Session und leitet auf das Loginformular weiter.

logout.php
PHP-Code:
<?php 
// Wird ausgeführt um mit der Ausgabe des Headers zu warten. 
ob_start (); 

session_start (); 
session_unset (); 
session_destroy (); 

header ("Location: formular.php"); 
ob_end_flush (); 
?>

8. Ausprobieren

Jetzt sind alle Versuchsdateien angelegt und wir können es jetzt ausprobieren. Vergewissern Sie sich noch einmal, dass alle Dateien im gleichen Verzeichnis liegen und rufen Sie dann einmal die Datei intern.php auf. Da Sie sich ja noch nicht eingeloggt haben müsste die in intern.php per include() eingefügte Datei checkuser.php Sie auf formular.php umleiten. Geben Sie nun im Formular einmal einen der beiden Benutzer an. (z.B. "admin" mit Kennwort "admin" oder "test" mit Kennwort "abc"). Das Formular schickt die Daten an login.php welche in der Datenbank die Werte überprüft. Wurde der Benutzer gefunden werden die Werte in der Session gespeichert und Sie werden wieder an die Datei intern.php weitergeleitet. Nun sehen Sie dort die in der Session gespeicherten Daten. Solange Sie sich nicht auf Ausloggen klicken, können Sie beliebig zwischen Seiten wechseln, Sie bleiben eingeloggt, solange Sie sich nicht mit einem anderen Namen einloggen bzw. das Browserfenster schließen. Viel Spaß beim Probieren.




* Wenn euch irgendwelche Fehler an dem Script auffallen oder Kritiken, Verbesserungsvorschläge oder sonst was abzugeben sind, meldet euch bei mir per eMail oder ICQ.
__________________
MfG

Karl Förster
Entwicklung / Development
PocketGear Deutschland GmbH

mobile2day.de - Home of PDAs and Smartphones
Bewertung
 
Ausführlichkeit
76%76%76%
3,80
Verständlichkeit
77.2%77.2%77.2%
3,86
Kompetenz
72%72%72%
3,60
Gesamteindruck
74.8%74.8%74.8%
3,74
43 User bewerteten mit 75% durchschnittlich

Tutorial-Optionen
 

Neue Tutorials bei tutorials.de
 
  #1 (permalink)  
Von Karl Förster an 30.08.03, 14:53
Achtung
Dies ist das alte Tutorial. Das neue Tutorial finden Sie weiter oben.


Grundlegende Denkweise
Das Login-System soll folgendermaßen funktionieren:
Über ein Formular kann der Benutzer seinen Benutzername und sein Kennwort eingeben. Mit einem Klick auf

"Absenden" werden die Daten des Formulars an die Datei "checkuser.php" geschickt. In dieser Datei suchen wir

in der Benutzerdatenbank nach Vorkommen des Benutzernamens in Verbindung mit dem eingegebenen Kennwort. Ist

kein Datensatz vorhanden heißt dies, dass die Daten falsch waren. Der Benutzer bekommt eine entsprechende

Fehlermeldung. Ist jedoch ein Datensatz vorhanden, sind die Daten richtig gewesen. Nun wird eine Session

gestartet und eine Variable "$user_eingeloggt" mit dem Wert "true" erstellt und in der Session registriert.

Nun könnte man z.B. den Benutzer wieder zur Startseite oder zu einer administrativen Oberfläche

weiterleiten.
Auf jeder Webseite wird am Anfang nun diese Session aufgerufen und der Wert von "$user_eingeloggt"

abgerufen. Ist der Wert "true", dann wird mit dem Seitenaufbau fortgefahren, andernfalls eine entsprechende

Fehlermeldung ausgegeben.
Für das Logout wird die Variable "$user_eingeloggt" einfach auf "false" gesetzt oder aus der Session

gelöscht.

Die Benutzerdatenbank
Um eine Tabelle in der Datenbank zu generieren verwenden wir phpMyAdmin. Erstellen Sie dazu eine Tabelle

"Benutzerdaten" mit den folgenden Feldern:

Feldname Typ Länge
Benutzername VarChar 30
Kennwort VarChar 30

Das Login-Formular
Dies ist der Quelltext des Formulars:

Code:
// HTML-Quellcode
<form action="checkuser.php" method="post">
  Benutzername: <input type="text" name="username" size="30">
  <br>
  Kennwort: <input type="password" name="password" size="30">
  <br>
  <input type="submit" value="Absenden">
</form>
// HTML-Quellcode
Die Datei checkuser.php
PHP-Code:
<?php
session_start 
(); // Starte eine Session.

// ======== AUFBAU DER DATENBANKVERBINGUN ========
$connID mysql_connect ("host""user""password");
@
mysql_select_db ("dbname"$connID);

// Generiere und starte die Abfrage
$sql "SELECT * FROM Benutzerdaten WHERE (Benutzername like '$username') AND (Kennwort = '$password')";
$result mysql_query ($sql$connID);

if (
mysql_num_rows ($result) > 0) {
  
// Ein Datensatz wurde gefunden.
  
$datenrichtig true;

  
// Variable $user_eingeloggt erstellen.
  
$user_eingeloggt true
} else {
  
// Die Benutzerdaten waren falsch.
  
$datenrichtig false;

  
// Variable $user_eingeloggt erstellen.
  
$user_eingeloggt false;
}

// Variable $user_eingeloggt in der Session registrieren.
session_register ("user_eingeloggt");
?>

<html>
<head>
  <?php if ($datenrichtig) { ?>
  <meta http-equiv="Refresh" content="2; url=startseite.php?<?=session_name()?>=<?=session_id()?>">
  <?php ?>
</head>

<body>
<?php

if ($datenrichtig) { 
  echo 
"Vielen Dank für’s Einloggen. Sie werden weitergeleitet...";
} else {
  echo 
"Die Daten waren falsch.";
}

?>
</body>
</html>
Überprüfung in jeder Seite
Um auf den Seiten Ihrer Webseite zu überprüfen ob der Benutzer eingeloggt ist, kopieren Sie folgenden

Quelltext an den Anfang jeder Seite.

PHP-Code:

session_start 
(); // Session starten.

if ((session_is_registered ("user_eingeloggt")) AND ($user_eingeloggt)) {
  
// Code, wenn der Benutzer eingeloggt ist.
  // z.B. Ausgabe der Webseite (echo „<html>...“)
} else {
  
// Code, wenn der Benutzer nicht eingeloggt ist.
  // z.B. Fehlermeldung

Die Logout-Funktion
Damit sich der Benutzer auch wieder ausloggen kann, sollten Sie auf jeder Webseite ein Link zu der folgenden

Datei (logout.php) erstellen.

PHP-Code:
<?php

session_start 
(); // Session starten.

$user_eingeloggt false;
session_register ("user_eingeloggt");

?>

<html>
<head>
  <meta http-equiv="Refresh" content="1; url=startseite.php">
</head>

<body>
Sie werden zur Startseite weitergeleitet…
</body>
</html>



* Wenn euch irgendwelche Fehler an dem Script auffallen oder Kritiken, Verbesserungsvorschläge oder sonst

was abzugeben sind, meldet euch bei mir per eMail oder ICQ.
 
 
Lesezeichen:


Tutorial-Optionen
Ansicht
Ähnliche Themen
 
Tutorial Autor Forum Kommentare Letzter Beitrag
[PHP/mySQL] Login-System mit Sessions xytrax PHP 4 03.05.07 22:34
MySQL Login-System mit Sessions (persönlicher Bereich lesterlong PHP 5 26.07.05 12:56
[PHP/MySQL] Login-System mit Sessions // warum geht es nicht?! komori PHP 2 30.10.04 14:38
PHP|MySQL Login´system mit Sessions: Anmeldungs-Script kyler PHP 14 15.09.04 22:14
Frage zu [PHP/mySQL] Login-System mit Sessions EchseKiuta PHP 9 01.09.04 17:41
» Tools
 
tutorials.de-Tools tutorial.de-Suchfeld tutorial.de-Widget tutorial.de-RSS-Feed tutorial.de-Banner
» Neue Links
 
Hits: 129
»
JHT's Planetary...
(Cinema 4D-Objekte)
Hits: 258
»
Tageslicht ohne GI
(Cinema 4D-Tutorials)
Hits: 145
»
Puzzle
(Cinema 4D-Tutorials)
Hits: 98
»
Lacreme
(Cinema 4D-Tutorials)
Hits: 187
»
Liquid Light
(Cinema 4D-Tutorials)
» Aktuelle Umfrage
 
Bist du mit der Geschwindigkeit der Tutorials.de-Website zufrieden?
Ja, es putzt mir glatt den Staub vom Bildschirm! - 78,77%
141 Stimmen
Nein, ich denke da muss noch nachgebessert werden... - 21,23%
38 Stimmen
Stimmen gesamt: 179
Du darfst bei dieser Umfrage nicht abstimmen.

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr.


Powered by vBulletin® Version 3.8.5 (Deutsch) & vBadvanced CMPS v.3.2.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.5.0 RC2 ©2010, Crawlability, Inc.
Alle Rechte vorbehalten ©2000 - 2010 tutorials.de
Design by Mark, CSS by Maik & Sven Mintel
Seite generiert in 0,25017 Sekunden mit 32 queries