PHP Loginsystem - Rechtesystem
Autor
 Flitze
Klicks 356607
Keywords:
PHP Login System, PHP Login, Rechtesystem, Loginsystem, Rechte, Administrator
 
Klicks 356607
Rating für PHP Loginsystem
8.6 von 10
Bewertungen295
 Stand
12.06.2013
 8.6 von 10
Bewertungen295
Keywords:
PHP Login System, PHP Login, Rechtesystem, Loginsystem, Rechte, Administrator
 Breadcrumb:
Workshops » PHP Loginsystem » PHP Loginsystem - Rechtesystem

5. Rechtesystem und CMS zur Userverwaltung als Administrator
[ADSENSE_LINE]Bei einer kleinen, privaten Website ist ein Rechtesystem vor allem für den Administrator interessant. Er kann sich dadurch die Zugangsrechte zu einem Verwaltungsbereich geben und die Webseite somit wie bei einem CMS online verwalten, ohne über phpmyadmin o.ä. agieren zu müssen.
Die Basis für unser Rechtesystem stellt folgende MySQL-Tabelle dar:
Code:
User_Rechte +-----------+--------------+------+---------+---------+----------------+ | NAME | TYP | NULL | KEY | DEFAULT | Extras | +-----------+--------------+------+---------+---------+----------------+ | ID | INT | | PRIMARY | | AUTO_INCREMENT | | UserID | INT | | | | | | Recht | VARCHAR(100) | | | | | +-----------+--------------+------+---------+---------+----------------+
Hier der Code, den ihr zum Erzeugen verwenden könnt:
PHP:
<?php
$sql = 'CREATE TABLE `User_Rechte` ('
        . ' `ID` INT AUTO_INCREMENT NOT NULL, '
        . ' `UserID` INT NOT NULL, '
        . ' `Recht` VARCHAR(100) NOT NULL, '
        . ' PRIMARY KEY (`ID`)'
        . ' )';
mysql_query($sql);
?>
Das Prinzip ist denkbar einfach, für jedes Recht wird ein neuer Datensatz erzeugt, den man durch die UserID genau einem User eindeutig zuordnen kann. Anhand eines Adminbereiches zeige ich euch jetzt, wie man diese Rechte verwendet. Dazu legen wir von Hand einen User an und geben ihm zwei Rechte:
PHP:
<?php
    error_reporting(E_ALL);
    $MYSQL_HOST = 'localhost';
    $MYSQL_USER = 'root';
    $MYSQL_PASS = 'myPassWord';
    $MYSQL_DATA = 'myDataBase';
    $connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
    mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
    $sql = "INSERT INTO
                        User
                        (Nickname,
                         Email,
                         Show_Email,
                         Passwort,
                         Registrierungsdatum
                        )
            VALUES
                        ('admin',
                         'webmaster@website.de',
                         '1',
                         '".md5('admin')."',
                         CURDATE()
                        )
           ";
    mysql_query($sql);
    $sql = "SELECT
                        LAST_INSERT_ID()
           ";
    $result = mysql_query($sql);
    $ID = mysql_result($result,0);
    $sql = "INSERT INTO
                        User_Rechte
                        (UserID,
                         Recht
                        )
            VALUES
                        ('".$ID."',
                         'Adminbereich'
                        )
           ";
    mysql_query($sql);
    $sql = "INSERT INTO
                        User_Rechte
                        (UserID,
                         Recht
                        )
            VALUES
                        ('".$ID."',
                         'User administrieren'
                        )
           ";
    mysql_query($sql);
?>
Somit haben wir unseren typischen admin-User. Die 2 Rechte sind 'Adminbereich' und 'User administrieren'. Adminbereich gibt uns das Recht, den Adminbereich zu betreten und User administrieren berechtigt uns, User zu bearbeiten und zu löschen. Zuerst müssen wird die Rechte aber verfügbar machen und benutzen dazu folgende Funktion:
PHP:
<?php
    // liefert die Rechte eines Users ..
    function getRights()
    {
        $rights = array();
        // .. indem die Rechte eines User aus der Datenbank ausgewählt werden..
        if(isset($_SESSION['UserID'])){
            $sql = "SELECT
                            Recht
                    FROM
                            User_Rechte
                    WHERE
                            UserID = '".$_SESSION['UserID']."'
                   ";
            $result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
            $rights = array();
            // .. und als array zurückgegeben werden
            while($row = mysql_fetch_assoc($result))
                    $rights[] = $row['Recht'];
        }
        return $rights;
    }
?>
Damit haben wir zwar die Rechte aus der Datenbank geholt, aber sie sind noch nicht dauerhaft verfügbar, dehalb werden sie nun noch in der Session gespeichert. Damit ich das aber nur ein einziges mal machen muss, führe ich die Funktion gleich beim Login aus. Also wird die unsere Login-Datei folgendermaßen erweitert:
PHP:
<?php
    error_reporting(E_ALL);
    $MYSQL_HOST = 'localhost';
    $MYSQL_USER = 'root';
    $MYSQL_PASS = 'myPassWord';
    $MYSQL_DATA = 'myDataBase';
    $connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
    mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
    // liefert die Rechte eines Users ..
    function getRights()
    {
        $rights = array();
        // .. indem die Rechte eines User aus der Datenbank ausgewählt werden..
        if(isset($_SESSION['UserID'])){
            $sql = "SELECT
                            Recht
                    FROM
                            User_Rechte
                    WHERE
                            UserID = '".$_SESSION['UserID']."'
                   ";
            $result = mysql_query($sql) OR die ("<pre>\n".$sql."</pre>\n".mysql_error());
            $rights = array();
            // .. und als array zurückgegeben werden
            while($row = mysql_fetch_assoc($result))
                    $rights[] = $row['Recht'];
        }
        return $rights;
    }
    // Loggt einen User ein, ..
    function doLogin($ID, $Autologin=false)
    {
        // .. indem die aktuelle Session ID in der Datenbank gespeichert wird
        $sql = "UPDATE
                        User
                SET
                        SessionID = '".mysql_real_escape_string(session_id())."',
                        Autologin = NULL,
                        IP = '".$_SERVER['REMOTE_ADDR']."',
                        Letzte_Aktion = '".mysql_real_escape_string(time())."',
                        Letzter_Login = '".mysql_real_escape_string(time())."'
                WHERE
                        ID = '".$ID."'
                ";
        mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        // Wenn 'eingeloggt bleiben' aktiviert wurde
        if($Autologin){
            // Zufallscode erzeugen
            $part_one = substr(time()-rand(100, 100000),5,10);
            $part_two = substr(time()-rand(100, 100000),-5);
            $Login_ID = md5($part_one.$part_two);
            // Code im Cookie speichern, 10 Jahre dürfte genügen
            setcookie("Autologin", $Login_ID, time()+60*60*24*365*10);
            $sql = "UPDATE
                            User
                    SET
                            Autologin = '".$Login_ID."'
                    WHERE
                            ID = '".$ID."'
                   ";
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        }
        // Daten des Users in der Session speichern
        $sql = "SELECT
                        Nickname
                FROM
                        User
                WHERE
                        ID = '".$ID."'
               ";
        $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        $row = mysql_fetch_assoc($result);
        $_SESSION['UserID'] = $ID;
        $_SESSION['Nickname'] = $row['Nickname'];
        // Rechte in der Session speichern
        $_SESSION['Rechte'] = getRights();
    }
    if(isset($_POST['submit']) AND $_POST['submit']=='Einloggen'){
        // Falls der Nickname und das Passwort übereinstimmen..
        $sql = "SELECT
                        ID
                FROM
                        User
                WHERE
                        Nickname = '".mysql_real_escape_string(trim($_POST['Nickname']))."' AND
                        Passwort = '".md5(trim($_POST['Passwort']))."'
               ";
        $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        // wird die ID des Users geholt und der User damit eingeloggt
        $row = mysql_fetch_assoc($result);
        // Prüft, ob wirklich genau ein Datensatz gefunden wurde
        if (mysql_num_rows($result)==1){
             doLogin($row['ID'], isset($_POST['Autologin']));
             echo "<h4>Willkommen ".$_SESSION['Nickname']."</h4>\n";
             echo "Sie wurden erfolgreich eingeloggt.<br>\n".
                  "Zur <a href=\"index.php\">Startseite</a>\n";
        }
        else{
             echo "Sie konnten nicht eingeloggt werden.<br>\n".
                  "Nickname oder Passwort fehlerhaft.<br>\n".
                  "Zurück zum <a href=\"".$_SERVER['PHP_SELF']."\">Login-Formular</a>\n";
        }
    }
    else{
        echo "<form ".
             " name=\"Login\" ".
             " action=\"".$_SERVER['PHP_SELF']."\" ".
             " method=\"post\" ".
             " accept-charset=\"ISO-8859-1\">\n";
        echo "Nickname :\n";
        echo "<input type=\"text\" name=\"Nickname\" maxlength=\"32\">\n";
        echo "<br>\n";
        echo "Passwort :\n";
        echo "<input type=\"password\" name=\"Passwort\">\n";
        echo "<br>\n";
        echo "eingeloggt bleiben :\n";
        echo "<input type=\"checkbox\" name=\"Autologin\" value=\"1\">\n";
        echo "<br>\n";
        echo "<input type=\"submit\" name=\"submit\" value=\"Einloggen\">\n";
        echo "<br>\n";
        echo "<a href=\"passwort.php\">Passwort vergessen</a> oder noch nicht <a href=\"registrierung.php\">registriert</a>?\n";
        echo "</form>\n";
    }
?>
Damit sind nun unsere Rechte in der Session überall verfügbar. Um euch nun deren Nutzen zu demonstrieren, lege ich einen Adminbereich an, den man nur betreten kann, wenn man das Recht 'Adminbereich' besitzt. In diesem Adminbereich gibt es den Menupunkt 'User', unter dem man User bearbeiten und löschen kann. Man benötigt zum Betreten dieses Menupunktes allerdings das Recht 'User administrieren'.
Adminbereich anlegen
So, wir legen nun erstmal den Ordner admin an und erstellen darin die Datei index.php. Diese Datei hat folgenden Inhalt:
PHP:
<?php
    error_reporting(E_ALL);
    $MYSQL_HOST = 'localhost';
    $MYSQL_USER = 'root';
    $MYSQL_PASS = 'myPassWord';
    $MYSQL_DATA = 'myDataBase';
    $connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error());
    mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error());
    session_start();
    // Prüfen, ob der User den Adminbereich betreten darf
    if(!isset($_SESSION['Rechte']) OR !in_array('Adminbereich', $_SESSION['Rechte']))
        die("Sie haben keine Berechtigung, diese Seite zu betreten!\n");
    // Array für die Bereiche anlegen
    $page = array();
    $page['user'] = "user/index.php";
    // Prüfen, ob die als $_GET['page'] übergebene Seite existiert
    if(isset($_GET['page']) AND isset($page[$_GET['page']]))
        include $page[$_GET['page']];
    // Ansonsten wird das Menu angezeigt
    else
        echo "<a href=\"index.php?page=user\">User administrieren</a>\n";
?>
Zuerst wird überprüft, ob der User überhaupt eingeloggt ist und zusätzlich, ob er die entsprechenden Rechte besitzt, den Adminbereich zu betreten. Ist dies nicht der Fall, wird die Abarbeitung an dieser Stelle durch die() beendet. Die verschiedenen Seiten werden nun alle in diese Seite includiert, damit man nicht bei jeder Seite prüfen muss, ob das Recht 'Adminbereich' verfügbar ist. Die Includierung erfolgt über den $_GET-Parameter 'page'. Dieser Parameter wird mit dem Array $page verglichen. Diese Array enthält alle erlaubten Bereiche, die man betreten kann. Im obigen Fall ist das nur der Bereich 'User administrieren', der über index.php?page=user zu erreichen ist. Wenn dort irgendetwas anderes als index.php?page=user steht, dann wird keine Übereinstimmung mit dem Bereichsarray festgestellt und das Menu wird angezeigt.
Jetzt können wir den Userverwaltungsbereich schreiben. Dazu erstellen wir in dem Ordner admin einen Ordner namens user und erstellen darin wiederum eine Datei index.php mit folgendem Inhalt:
PHP:
<?php
    error_reporting(E_ALL);
    // Prüfen, ob der User den Userbereich betreten darf
    if(!in_array('User administrieren', $_SESSION['Rechte']))
        die("Sie haben keine Berechtigung, diese Seite zu betreten!\n");
    
    switch(isset($_GET['action'])?$_GET['action']:''){
        case 'edit':
            include 'user/edit.php';
                    echo "Zurück zum <a href=\"index.php?page=user\">User-Menu</a>\n";
                         break;
         case 'delete':
            include 'user/delete.php';
                    echo "Zurück zum <a href=\"index.php?page=user\">User-Menu</a>\n";
                         break;
         default:
                         $actions = array('edit' => 'bearbeiten',
                                   'delete' => 'löschen');
                         foreach($actions as $action => $name)
                    echo "<a href=\"index.php?page=user&action=".$action."\">".$name."</a><br>\n";
                 break;
    }
?>
Hier arbeite ich erneut mit include() und einer switch-Abfrage. Diesmal wird der $_GET-Parameter 'action' überprüft.
isset($_GET['action'])?$_GET['action']:''
bedeuteutet übrigens nur, dass der Wer von $_GET['action'] als switch-Parameter betrachtet wird. Wenn $_GET['action'] nicht gesetzt ist, wird der default-Fall geladen und es gibt keine Fehlermeldung á la 'unbekannte Variable'.
User löschen
Nun müssen die beiden Dateien edit.php und delete.php noch mit Leben gefüllt werden. Ich beginne mal mit der delete.php.
PHP:
<?php
    error_reporting(E_ALL);
    if(isset($_POST['ID']) AND $_POST['ID'] != 0) {
        if(isset($_POST['submit']) AND $_POST['submit'] == 'User löschen') {
            // Rechte löschen
            $sql = "DELETE FROM
                                User_Rechte
                    WHERE
                                UserID = '".$_POST['ID']."'
                   ";
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            // User löschen
            $sql = "DELETE FROM
                                User
                    WHERE
                                ID = '".$_POST['ID']."'
                   ";
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            echo "Der User wurde gelöscht.<br>\n";
        }
        elseif(isset($_POST['submit']) AND $_POST['submit'] == 'User auswählen') {
            echo "Wollen Sie diesen User wirklich löschen?<br>\n";
            $sql = "SELECT
                            SessionID,
                            Nickname,
                            Email,
                            Show_Email,
                            DATE_FORMAT(Registrierungsdatum, '%d.%m.%Y') as Datum,
                            Letzte_Aktion,
                            Letzter_Login
                    FROM
                            User
                    WHERE
                            ID = '".mysql_real_escape_string($_POST['ID'])."'
                   ";
            $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            $row = mysql_fetch_assoc($result);
            echo "<table>\n";
            echo " <tr>\n";
            echo "  <td>\n";
            echo "Nickname :\n";
            echo "  </td>\n";
            echo "  <td>\n";
            echo htmlentities($row['Nickname'], ENT_QUOTES)."\n";
            echo " (";
            if($row['SessionID'] AND (time()-60*2 < $row['Letzte_Aktion']))
                echo "<span style=\"color:green\">online</span>\n";
            else
                echo "<span style=\"color:red\">offline</span>\n";
            echo ")";
            echo "  </td>\n";
            echo " </tr>\n";
            echo " <tr>\n";
            echo "  <td>\n";
            echo "Email-Adresse :\n";
            echo "  </td>\n";
            echo "  <td>\n";
            if($row['Show_Email']==1)
                echo htmlentities($row['Email'], ENT_QUOTES)."\n";
            echo "  </td>\n";
            echo " </tr>\n";
            echo " <tr>\n";
            echo "  <td>\n";
            echo "Registrierungsdatum :\n";
            echo "  </td>\n";
            echo "  <td>\n";
            echo $row['Datum']."\n";
            echo "  </td>\n";
            echo " </tr>\n";
            echo " <tr>\n";
            echo "  <td>\n";
            echo "Letzter Login :\n";
            echo "  </td>\n";
            echo "  <td>\n";
            echo date('d.m.Y H:i \U\h\r', $row['Letzter_Login'])."\n";
            echo "  </td>\n";
            echo " </tr>\n";
            echo " <tr>\n";
            echo "</table>\n";
            echo "<form ".
                 "action=\"index.php?section=admin&page=user&action=delete\" ".
                 "method=\"post\">\n";
            echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
            echo "<input type=\"submit\" name=\"submit\" value=\"User löschen\">\n";
            echo "</form>\n";
        }
    }
    else {
        $sql = "SELECT
                        ID,
                        Nickname
                FROM
                        User
                ORDER BY
                        Nickname ASC
               ";
        $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        if(!mysql_num_rows($result))
            echo "Es befinden sich keine User in der Datenbank\n";
        else {
            echo "<form ".
                 " action=\"index.php?page=user&action=delete\" ".
                 " method=\"post\" ".
                 " accept-charset=\"ISO-8859-1\">";
            echo "<select name=\"ID\">\n";
            echo " <option value=\"0\">Bitte einen User wählen</option>\n";
            while($row = mysql_fetch_assoc($result)) {
                echo " <option value=\"".$row['ID']."\">\n";
                echo $row['Nickname']."\n";
                echo " </option>\n";
            }
            echo "</select>\n";
            echo "<input type=\"submit\" name=\"submit\" value=\"User auswählen\">";
            echo "</form>\n";
        }
    }
?>
Beim ersten Aufruf wird eine Auswahlliste mit allen Usern angezeigt. Wenn man einen User ausgewählt hat und auf 'User auswählen' klickt, werden einige Daten des Users zur Kontrolle noch einmal angezeigt, damit man nicht unbeabsichtigt einen falschen User löscht. Nach einer erneuten Bestätigung werden dann erst alle Rechte des Users und dann der User selbst gelöscht.
User bearbeiten
Die edit.php beginnt mit der gleichen Auswahlliste. Beim Auswählen eines Users wird dann ein Formular erstellt, dass dem des veränderbaren Userprofils sehr ähnlich ist. Dieses Formular wird noch um die Rechte-Option erweitert. Die Datei sieht folgendermaßen aus:
PHP:
<?php
    error_reporting(E_ALL);
    if(isset($_POST['ID']) AND $_POST['ID'] != 0) {
        // Avatar hochladen
        if(isset($_POST['submit']) AND $_POST['submit'] == "Avatar hochladen") {
            $errors = array();
            // Uploadfehler prüfen
            switch ($_FILES['pic']['error']){
                case 1: $errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 20 KB ist.";
                                    break;
                case 2: $errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 20 KB ist.";
                                    break;
                case 3: $errors[] = "Die Datei wurde nur teilweise hochgeladen.";
                                    break;
                case 4: $errors[] = "Es wurde keine Datei ausgewählt.";
                                    break;
                default : break;
            }
            // Prüfen, ob eine Grafikdatei vorliegt
            if(!@getimagesize($_FILES['pic']['tmp_name']))
                $errors[] = "Ihre Datei ist keine gültige Grafikdatei.";
            else {
                // Mime-Typ prüfen
                $erlaubte_typen = array('image/pjpeg',
                                        'image/jpeg',
                                        'image/gif',
                                        'image/png'
                                       );
                if(!in_array($_FILES['pic']['type'], $erlaubte_typen))
                    $errors[] = "Der Mime-Typ der Datei ist verboten.";
                    // Endung prüfen
                    $erlaubte_endungen = array('jpeg',
                                               'jpg',
                                               'gif',
                                               'png'
                                              );
                    $endung = strtolower(substr($_FILES['pic']['name'], strrpos($_FILES['pic']['name'], '.')+1));
                    if(!in_array($endung, $erlaubte_endungen))
                        $errors[] = "Die Dateiendung muss .jpeg .jpg .gif oder .png lauten ";
                    // Ausmaße prüfen
                    $size = getimagesize($_FILES['pic']['tmp_name']);
                        if ($size[0] > 150 OR $size[1] > 150)
                            $errors[] = "Die Datei darf maximal 150 Pixel breit und 150 Pixel hoch sein.";
            }
            // Dateigröße prüfen
            if($_FILES['pic']['size'] > 0.2*1024*1024)
                $errors[] = "Bitte wählen Sie eine Datei aus, die kleiner als 20 KB ist.";
            if(count($errors)){
                echo "Das Avatar konnte nicht gespeichert werden.<br>\n".
                     "<br>\n";
                foreach($errors as $error)
                    echo $error."<br>\n";
            }
            else {
                // Bild auf dem Server speichern
                $uploaddir = '../avatare/';
                // neuen Bildname erstellen
                $Name = "IMG_".substr(microtime(),-8).".".$endung;
                if (move_uploaded_file($_FILES['pic']['tmp_name'], $uploaddir.$Name)) {
                    $sql = "UPDATE
                                    User
                            SET
                                    Avatar = '".mysql_real_escape_string(trim($Name))."'
                            WHERE
                                    ID = ".$_POST['ID']."
                           ";
                    mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                    echo "Das Avatar wurde erfolgreich gespeichert.<br>\n";
                }
                else {
                    echo "Es trat ein Fehler auf, bitte versuche es später erneut.<br>\n";
                }
            }
        }
        // Avatar löschen
        elseif(isset($_POST['submit']) AND $_POST['submit'] == 'Avatar löschen') {
            // Bildname des Avatars aus der Datenbank holen
            $sql = "SELECT
                            Avatar
                    FROM
                            User
                    WHERE
                            ID = '".$_POST['ID']."'
                   ";
            $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            $row = mysql_fetch_assoc($result);
            // Datei löschen
            unlink('../avatare/'.$row['Avatar']);
            // Bildname des Avatars als leeren String setzen
            $sql = "UPDATE
                            User
                    SET
                            Avatar = ''
                    WHERE
                            ID = '".$_POST['ID']."'
                   ";
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            echo "Der Avatar wurde erfolgreich gelöscht.<br>\n";
        }
        elseif(isset($_POST['submit']) AND $_POST['submit']=='Daten ändern'){
            // Fehlerarray anlegen
            $errors = array();
            // Prüfen, ob alle Formularfelder vorhanden sind
            if(!isset($_POST['Email'],
                      $_POST['Show_Email'],
                      $_POST['Homepage'],
                      $_POST['Wohnort'],
                      $_POST['ICQ'],
                      $_POST['AIM'],
                      $_POST['YIM'],
                      $_POST['MSN']))
                // Ein Element im Fehlerarray hinzufügen
                $errors[]= "Bitte benutzen Sie das Formular aus dem User-Menu.";
            else{
                $emails = array();
                $sql = "SELECT
                                Email
                        FROM
                                User
                       ";
                $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                while($row = mysql_fetch_assoc($result))
                    $emails[] = $row['Email'];
                $sql = "SELECT
                                Email
                        FROM
                                User
                        WHERE
                                ID = '".mysql_real_escape_string($_POST['ID'])."'
                       ";
                $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                $row = mysql_fetch_assoc($result);
                if(trim($_POST['Email'])=='')
                    $errors[]= "Bitte geben Sie dase Email-Adresse ein.";
                elseif(!preg_match('§^[\w\.-]+@[\w\.-]+\.[\w]{2,4}$§', trim($_POST['Email'])))
                    $errors[]= "Ihre Email Adresse hat eine falsche Syntax.";
                elseif(in_array(trim($_POST['Email']), $emails) AND trim($_POST['Email'])!= $row['Email'])
                    $errors[]= "Diese Email-Adresse ist bereits vergeben.";
            }
            if(count($errors)){
                echo "Die Daten konnten nicht bearbeitet werden.<br>\n".
                     "<br>\n";
                foreach($errors as $error)
                    echo $error."<br>\n";
            }
            else{
                $sql = "UPDATE
                                User
                        SET
                                Email =  '".mysql_real_escape_string(trim($_POST['Email']))."',
                                Show_Email = '".mysql_real_escape_string(trim($_POST['Show_Email']))."',
                                Wohnort = '".mysql_real_escape_string(trim($_POST['Wohnort']))."',
                                Homepage = '".mysql_real_escape_string(trim($_POST['Homepage']))."',
                                ICQ = '".mysql_real_escape_string(trim($_POST['ICQ']))."',
                                AIM = '".mysql_real_escape_string(trim($_POST['AIM']))."',
                                YIM = '".mysql_real_escape_string(trim($_POST['YIM']))."',
                                MSN = '".mysql_real_escape_string(trim($_POST['MSN']))."'
                        WHERE
                                ID = '".mysql_real_escape_string($_POST['ID'])."'
                       ";
                mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                echo "Die Daten wurden erfolgreich gespeichert.<br>\n";
            }
        }
        elseif(isset($_POST['submit']) AND $_POST['submit'] == 'Passwort ändern') {
            $errors=array();
            if(!isset($_POST['Passwort'],
                      $_POST['Passwortwiederholung']))
                $errors[]= "Bitte benutzen Sie das Formular aus dem User-Menu.";
            else {
                if(trim($_POST['Passwort'])=="")
                    $errors[]= "Bitte geben Sie das Passwort ein.";
                elseif(strlen(trim($_POST['Passwort'])) < 6)
                    $errors[]= "Ihr Passwort muss mindestens 6 Zeichen lang sein.";
                if(trim($_POST['Passwortwiederholung'])=="")
                    $errors[]= "Bitte wiederholen Sie das Passwort.";
                elseif(trim($_POST['Passwort']) != trim($_POST['Passwortwiederholung']))
                    $errors[]= "Ihre Passwortwiederholung war nicht korrekt.";
            }
            if(count($errors)){
                echo "Das Passwort konnte nicht gespeichert werden.<br>\n".
                     "<br>\n";
                foreach($errors as $error)
                    echo $error."<br>\n";
            }
            else{
                $sql = "UPDATE
                                    User
                        SET
                                    Passwort ='".md5(trim($_POST['Passwort']))."'
                        WHERE
                                    ID = '".$_POST['ID']."'
                       ";
                mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                echo "Das Passwort wurde erfolgreich gespeichert.<br>\n";
            }
        }
        // Rechte ändern
        elseif(isset($_POST['submit']) AND $_POST['submit'] == 'Rechte ändern') {
            // Alle Rechte löschen
            $sql = "DELETE FROM
                            User_Rechte
                    WHERE
                            UserID = '".$_POST['ID']."'
                   ";
            mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            // Ausgewählte Rechte speichern
            if(isset($_POST['Rechte'])){
                foreach($_POST['Rechte'] as $recht){
                    $sql = "INSERT INTO
                                    User_Rechte
                                    (UserID,
                                     Recht
                                    )
                            VALUES
                                    ('".$_POST['ID']."',
                                     '".$recht."'
                                    )
                           ";
                    mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
                }
            }
            echo "Die Rechte wurden gespeichert.<br>\n";
        }
        else {
            $sql = "SELECT
                        Nickname,
                        Email,
                        Show_Email,
                        Wohnort,
                        Homepage,
                        ICQ,
                        AIM,
                        YIM,
                        MSN,
                        Avatar
                 FROM
                        User
                 WHERE
                        ID = '".mysql_real_escape_string($_POST['ID'])."'
                ";
            $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
            $row = mysql_fetch_assoc($result);
            echo "<form ".
                 " name=\"Daten\" ".
                 " action=\"index.php?page=user&action=edit\" ".
                 " method=\"post\" ".
                 " accept-charset=\"ISO-8859-1\">\n";
            echo "<h5>Obligatorische Angaben</h5>\n";
            echo "<span>\n".
                 "Nickname :\n".
                 "</span>\n";
            echo htmlentities($row['Nickname'], ENT_QUOTES)."\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\" ".
                 " title=\"Ihre.Adresse@Ihr-Anbieter.de\">\n".
                 "Email-Adresse:\n".
                 "</span>\n";
            echo "<input type=\"text\" name=\"Email\" maxlength=\"70\" value=\"".htmlentities($row['Email'], ENT_QUOTES)."\">\n";
            echo "<br>\n";
            echo "<span>\n".
                 "Email-Adresse anzeigen:\n".
                 "</span>\n";
            if($row['Show_Email']==1){
                echo "<input type=\"radio\" name=\"Show_Email\" value=\"1\" checked> ja\n";
                echo "<input type=\"radio\" name=\"Show_Email\" value=\"0\"> nein\n";
            }
            else{
                echo "<input type=\"radio\" name=\"Show_Email\" value=\"1\"> ja\n";
                echo "<input type=\"radio\" name=\"Show_Email\" value=\"0\" checked> nein\n";
            }
            echo "<h5>Freiwillige Angaben</h5>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "Homepage :\n";
                 "</span>\n";
            echo "<input type=\"text\" name=\"Homepage\" maxlength=\"70\" value=\"".htmlentities($row['Homepage'], ENT_QUOTES)."\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "Wohnort :\n".
                 "</span>\n";
            echo "<input type=\"text\" name=\"Wohnort\" maxlength=\"70\" value=\"".htmlentities($row['Wohnort'], ENT_QUOTES)."\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "ICQ :\n".
                 "</span>\n";
            echo "<input type=\"text\" name=\"ICQ\" maxlength=\"20\" value=\"".htmlentities($row['ICQ'], ENT_QUOTES)."\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "AIM :\n".
                 "</span>\n";
            echo "<input type=\"text\" name=\"AIM\" maxlength=\"70\" value=\"".htmlentities($row['AIM'], ENT_QUOTES)."\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "YIM :\n".
                 "</span>\n";
            echo "<input type=\"text\" name=\"YIM\" maxlength=\"70\" value=\"".htmlentities($row['YIM'], ENT_QUOTES)."\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\">\n".
                 "MSN :\n".
                 "</span>\n";
            echo "<input type=\"text\" name=\"MSN\" maxlength=\"70\" value=\"".htmlentities($row['MSN'], ENT_QUOTES)."\">\n";
            echo "<br>\n";
            echo "<input type=\"submit\" name=\"submit\" value=\"Daten ändern\">\n";
            echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
            echo "</form>\n";
            echo "<form ".
                 " name=\"Passwort\" ".
                 " action=\"index.php?page=user&action=edit\" ".
                 " method=\"post\" ".
                 " accept-charset=\"ISO-8859-1\">\n";
            echo "<span style=\"font-weight:bold;\" ".
                 " title=\"min.6\">\n".
                 "Neues Passwort :\n".
                 "</span>\n";
            echo "<input type=\"password\" name=\"Passwort\">\n";
            echo "<br>\n";
            echo "<span style=\"font-weight:bold;\" ".
                 " title=\"min.6\">\n".
                 "Neues Passwort wiederholen:\n".
                 "</span>\n";
            echo "<input type=\"password\" name=\"Passwortwiederholung\">\n";
            echo "<br>\n";
            echo "<input type=\"submit\" name=\"submit\" value=\"Passwort ändern\">\n";
            echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
            echo "</form>\n";
            // Avatar
            echo "<form ".
                 " name=\"Avatar\" ".
                 " action=\"index.php?page=user&action=edit\" ".
                 " method=\"post\" ".
                 " enctype=\"multipart/form-data\" ".
                 " accept-charset=\"ISO-8859-1\">\n";
            echo "<span style=\"font-weight:bold;\" ".
                 " title=\"max. 20kb\nmax 150x150 Pixel\n .jpg .gif oder .png\">\n".
                 "Avatar :\n".
                 "</span>\n";
            if($row['Avatar']=='')
                echo "Kein Avatar vorhanden.\n";
            else
                echo "<img src=\"../avatare/".htmlentities($row['Avatar'], ENT_QUOTES)."\">\n";
            if($row['Avatar']=='') {
                echo "<input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"".(0.02*1024*1024)."\">";
                echo "<input name=\"pic\" type=\"file\">\n";
                echo "<input type=\"submit\" name=\"submit\" value=\"Avatar hochladen\">\n";
            }
            else
                echo "<input type=\"submit\" name=\"submit\" value=\"Avatar löschen\">\n";
            echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
            echo "</form>\n";
            // Rechte
            echo "<form ".
                 " name=\"Rechte\" ".
                 " action=\"index.php?page=user&action=edit\" ".
                 " method=\"post\" ".
                 " accept-charset=\"ISO-8859-1\">\n";
            $sql = "SELECT
                            Recht
                    FROM
                            User_Rechte
                    WHERE
                            UserID = '".$_POST['ID']."'
                   ";
           $result_rechte = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
           $User_Rechte = array();
           while($row_rechte = mysql_fetch_assoc($result_rechte))
               $User_Rechte[] = $row_rechte['Recht'];
           $rechte = array('Adminbereich',
                           'User administrieren'
                          );
           foreach($rechte as $recht){
               if(in_array($recht, $User_Rechte))
                   echo "<input type=\"checkbox\" name=\"Rechte[]\" value=\"".$recht."\" checked>\n";
               else
                   echo "<input type=\"checkbox\" name=\"Rechte[]\" value=\"".$recht."\">\n";
               echo "<span>\n".
                    $recht."\n".
                    "</span>\n";
               echo "<br>\n";
           }
           echo "<input type=\"submit\" name=\"submit\" value=\"Rechte ändern\">\n";
           echo "<input type=\"hidden\" name=\"ID\" value=\"".$_POST['ID']."\">\n";
           echo "</form>\n";
       }
    }
    else {
        $sql = "SELECT
                        ID,
                        Nickname
                FROM
                        User
                ORDER BY
                        Nickname ASC
               ";
        $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        if(!mysql_num_rows($result))
            echo "Es befinden sich keine User in der Datenbank\n";
        else {
            echo "<form ".
                 " action=\"index.php?page=user&action=edit\" ".
                 " method=\"post\" ".
                 " accept-charset=\"ISO-8859-1\">";
            echo "<select name=\"ID\">\n";
            echo " <option value=\"0\">Bitte einen User wählen</option>\n";
            while($row = mysql_fetch_assoc($result)) {
                echo " <option value=\"".$row['ID']."\">\n";
                echo $row['Nickname']."\n";
                echo " </option>\n";
            }
            echo "</select>\n";
            echo "<input type=\"submit\" name=\"submit\" value=\"User auswählen\">";
            echo "</form>\n";
        }
    }
?>
Wie gesagt, diese Datei entspricht wirklich ziemlich genau dem, was wir vorher unter dem Userprofil behandelt haben. Wir benutzen nun lediglich nicht mehr Session['UserID'] sondern eben $_POST['ID'] das wir bei jeden Formular als hidden-Feld mitgeben.
Die Rechte eines Users werden ausgelesen und mit den verfügbaren Rechten verglichen. Kommt es zu einer Übereinstimmung, wird die entsprechende Checkbox vorselektiert. Beim Abschicken des Rechteformulars werden alle Rechte des Users gelöscht und dann erneut eingefügt.
Durch diese Datei kann man sein Usermanagment nun völlig frei gestalten und hat jederzeit die volle Kontrolle über seine User.
Damit ist der Workshop beendet, Fragen und Probleme können im Forum diskutiert werden.
Zurück zur vorigen Seite:
PHP Loginsystem - Benutzerliste und Userprofile Weiter zur nächsten Seite:
PHP Loginsystem - Download
   Suchmaschinenoptimierung (SEO - Search Engine Optimization)
 
