PHP Tutorials, PHP lernen, PHP Forum, PHP Community and more ... MyWebsolution.de!

Sidebar

Home News Tutorials Workshops Tipps Artikel Gästebuch Sitemap Pascal Landau

Suche

Members

Forum Login Registrierung

Statistik

Statistikbereich
Jetzt1
Heute56
Gestern223
Gesamt2326007

PHP Loginsystem - Rechtesystem

Autor Flitze
Klicks 346167
Rating für PHP Loginsystem
  8.8 von 10
Bewertungen286
Stand 12.06.2013
Keywords:
Autologin, PHP Login, MySQL PHP Login System, Rechtesystem, Loginsystem, Rechte, Administrator

Amazon: PHP 5.3 und MySQL 5.1
Breadcrumb:
Workshops » PHP Loginsystem » PHP Loginsystem - Rechtesystem
Seite : 1 2 3 4 5 6 Bewerten
Article Wizard - deutscher Article Spinner

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(100100000),5,10);
            
$part_two substr(time()-rand(100100000),-5);
            
$Login_ID md5($part_one.$part_two);
            
// Code im Cookie speichern, 10 Jahre dürfte genügen
            
setcookie("Autologin"$Login_IDtime()+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*$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

»» Zurück zum Menu

Suchmaschinenoptimierung

Suchmaschinenoptimierung (SEO - Search Engine Optimization)

Ranking

Tutorials (13)

8.6
8.4
8

Workshops (3)

8.8
8.7
7.6

Tipps (12)

7.2
6.7
6.5

Artikel (32)

8.4
8
7.2

RSS Feeds

Full Feed Tutorials Workshops Tipps Artikel

Twitter

Follow me on Twitter

Partner & Links


Valid HTML 4.01 Transitional
Valid CSS
nach oben

Diese Seiten unterstützen MyWebsolution:
 
© MyWebsolution.de
2006-2024