tutorials.de-Buchverschenkaktion 08/2010
Thema geschlossen
  1. #1
    Benutzerbild von Karl Förster
    Karl Förster Karl Förster ist offline Mitglied Platin Karl Förster sorgt für eine eindrucksvolle Atmosphäre
    Registriert seit
    Feb 2001
    Ort
    München
    Beiträge
    646
    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.
    Geändert von Karl Förster (09.12.03 um 13:39 Uhr)
    MfG

    Karl Förster
    Entwicklung / Development
    PocketGear Deutschland GmbH

    mobile2day.de - Home of PDAs and Smartphones

  2. #2
    Benutzerbild von Karl Förster
    Karl Förster Karl Förster ist offline Mitglied Platin Karl Förster sorgt für eine eindrucksvolle Atmosphäre
    Registriert seit
    Feb 2001
    Ort
    München
    Beiträge
    646
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    // 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.
    MfG

    Karl Förster
    Entwicklung / Development
    PocketGear Deutschland GmbH

    mobile2day.de - Home of PDAs and Smartphones

Ähnliche Themen

  1. [PHP/mySQL] Login-System mit Sessions
    Von xytrax im Forum PHP
    Antworten: 4
    Letzter Beitrag: 03.05.07, 22:34
  2. Antworten: 5
    Letzter Beitrag: 26.07.05, 12:56
  3. Antworten: 2
    Letzter Beitrag: 30.10.04, 14:38
  4. Antworten: 14
    Letzter Beitrag: 15.09.04, 22:14
  5. Antworten: 9
    Letzter Beitrag: 01.09.04, 17:41

Lesezeichen

Lesezeichen