Praktisches Arbeiten mit einer PHP-Anwendung inkl. Zugriff auf die

Transcription

Praktisches Arbeiten mit einer PHP-Anwendung inkl. Zugriff auf die
Praktisches Arbeiten
mit einer PHP-Anwendung
inkl. Zugriff auf die mySQL-Datenbank
hier: Benutzerverwaltung
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Inhaltsverzeichnis, Seite I
Inhaltsverzeichnis
1
Ziel ............................................................................................................................. 1
2
I. Teil der Planung und Konzeption - Theoretische Grundlagen ........................... 2
2.1 Konzeptionelle Modellierung: Abbildung der Realität im Entity-RelationshipModell (ER-Modell) ..................................................................................................... 2
2.2 Logische Modellierung: Umsetzung des ER-Modells in ein relationales
Modell ........................................................................................................................ 2
2.3 Physische Modellierung: Übertragung des relationalen Modells in
physische Strukturen, also Umsetzung in eine mySQL-Datenbank ............................ 2
2.4 Entwicklung der PHP-Anwendung: Zugriff auf die mySQL-Datenbank durch
den Internet-Besucher ................................................................................................ 2
3
2.4.1
Sprachelemente von PHP ............................................................................... 3
2.4.2
PHP/MySQL-Schmittstellen (mysql, myqli, PDO) ............................................ 5
II. Teil der Planung und Konzeption - Praktische Umsetzung ............................... 8
3.1 Konzeptionelle Modellierung: Abbildung der Realität im Entity-RelationshipModell (ER-Modell) ..................................................................................................... 8
3.2 Logische Modellierung: Umsetzung des ER-Modells in ein relationales
Modell ........................................................................................................................ 9
3.3 Physische Modellierung: Übertragung des relationalen Modells in
physische Strukturen, also Umsetzung in eine mySQL-Datenbank ............................ 9
3.4 Entwicklung der PHP-Anwendung: Zugriff auf die mySQL-Datenbank durch
den Internet-Besucher .............................................................................................. 10
3.4.1
Aufbau des Codes ........................................................................................ 10
3.4.2
Wichtige Codefragmente............................................................................... 11
4
Fazit und Ausblick .................................................................................................. 16
5
Verzeichnisse ........................................................................................................... 1
5.1 Literaturverzeichnis .................................................................................................... 1
5.2 Bildverzeichnis ........................................................................................................... 1
5.3 Anhang ....................................................................................................................... 2
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 1
1
Ziel
"Eine Benutzerverwaltung hat für den Betreiber einer Seite viele Vorteile. Mit der Registrierung
wird eine Verbindung zwischen Website und User hergestellt. Dadurch erhöht sich die Wahrscheinlichkeit, dass der User die Seite erneut und vielleicht sogar regelmäßig besucht." (Landau,
S. 1) Auch benötigt der Betreiber des Internetauftritts eine Benutzerverwaltung, wenn der Betreiber
Teile seines Auftritts vor neugierigen Augen schützen will. (vgl. Wilfing und org 2005, S. 1) Ein autorisierter Benutzer darf also, erst nachdem er die korrekten Zugangsdaten angegeben hat, diese
Webseiten öffnen. (vgl. Rupp 2009, S. 564)
Diese Ausarbeitung zeigt, wie die PHP-Anwendung „Benutzerverwaltung“ entwickelt werden
kann. Dabei werden die Anwenderdaten in einer MySQL-Datenbank abgelegt. Auf diese Daten
wird dann mittels PHP zugegriffen. (PHP Hypertext Preprocessor) ist eine kostenlose Skriptsprache zur Webprogrammierung. MySQL ist ein kostenloses relationales DBMS (Datenbankmanagmentsystem).
Die Entwicklung einer Benutzerverwaltung erfordert zahlreiche Arbeitsschritte, die im Folgenden
beschrieben werden. Im I. Teil werden zunächst die theoretischen Grundlagen für die Planung
und Konzeption der Benutzerverwaltung dargestellt. Die theoretischen Grundlagen der Planung
und Konzeption werden im II. Teil in die Praxis für eine Benutzerverwaltung umgesetzt. Im zu beschreibenden Use-Case (= Anwendungsfall) werden folgende Vorgaben erarbeitet:
Die Benutzerverwaltung kennt Rollen und Benutzer. Jeder Benutzer hat eine User-ID und ein
Passwort mit dem er sich bei dem System anmeldet.
Die Benutzerverwaltung erlaubt:
1) den Benutzer, mit Name, Vorname, E-Mail, Telefonnummer, Bild und einer User-ID sowie
Passwort anzulegen. Das Passwort soll verschlüsselt sein.
2) jeden Benutzer eine Rolle mit Rechten zu zuweisen, so dass alle Benutzer mit den gleichen
Rechte ausgestattet sind, die ihrer Rolle entspricht.
Die möglichen Rechte sind vom Verfasser dieser Ausarbeitung bestimmt.
Die Benutzer und Rollen sollen in einer MySQL Datenbank gespeichert werden.
Für die Administrationsaufgabe wird Folgendes benötigt:
1) eine Eingabeseite um die Rollen und die einzelnen Benutzer einzugeben,
2) und eine Ausgabeseite mit verschiedenen Ansichten.

Sicht 1: zu einer gewählten Rolle sollen alle Benutzer aufgelistet werden.

Sicht 2: alle Benutzer und ihre Rollen sollen auflistet werden. Man kann die Liste nach
Benutzer oder Rollen sortieren.
Diese Ausarbeitung legt den Schwerpunkt auf die Beschreibung des Zugriffs mittels einer PHPAnwendung auf eine SQL-Datenbank.
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 2
2
I. Teil der Planung und Konzeption - Theoretische Grundlagen
Die Planung und Konzeption einer Benutzerverwaltung wird in Arbeitsschritte aufgeteilt, damit die
Vorgehensweise klar und übersichtlich strukturiert wird.
2.1
Konzeptionelle Modellierung: Abbildung der Realität im Entity-Relationship-Modell
(ER-Modell)
"Nach der Erfassung und Analyse aller Anforderungen wird im nächsten Schritt mit Hilfe eines
konzeptionellen Datenmodells ein konzeptionelles Schema für die Datenbank erstellt. [...] Das
konzeptionelle Schema ist eine kompakte Beschreibung der Datenanforderungen der Benutzer
und beinhaltet ausführliche Beschreibungen der Entitätstypen, Beziehungen und Einschränkungen." (Elmasri und Navathe 2009, S. 58)
2.2
Logische Modellierung: Umsetzung des ER-Modells in ein relationales Modell
"Der nächste Schritt im Datenbankentwurf ist die eigentliche Implementierung der Datenbank unter
Verwendung eines kommerziellen DBMS (Datebankmanagementsystem). Die meisten heute angebotenen kommerziellen DBMS verwenden ein Implementierungsdatenmodell, z. B. das relationale oder Objekt-Datenbankmodell, [...]. Dieser Schritt wird als logischer Entwurf bezeichnet [...]."
(Elmasri und Navathe 2009, S. 60)
2.3
Physische Modellierung: Übertragung des relationalen Modells in physische Strukturen, also Umsetzung in eine mySQL-Datenbank
"Am Beginn jeder Datenbankanwendung steht das Design der Datenbank [..], also die Umsetzung
des relationalen Modells in eine mySQL-Datenbank. Fehler, die in der Designphase begangen
werden, lassen sich später nur mit sehr großem Aufwand korrigieren." (Kofler und Öggl 2010,
S. 307)
Zum konkreten Erzeugen von Datenbanken und Tabellen gibt es zwei Möglichkeiten. "Am komfortabelsten ist es, eine Benutzeroberfläche wie phpMyAdmin einzusetzen. [...] Die andere Variante
besteht darin, Datenbanken und Tabellen durch entsprechende SQL-Kommandos zu erzeugen
(z. B. CREATE TABLE name, [...] …)." (Kofler und Öggl 2010, S. 307)
2.4
Entwicklung der PHP-Anwendung: Zugriff auf die mySQL-Datenbank durch den Internet-Besucher
"Die Programmiersprache PHP wurde entwickelt, um statische HTML-Seiten mit Programmierlogik
aufwerten zu können. [...]
Die PHP-Funktionen werden als Teil des Webservers geladen (als Modul) und werden daher direkt
im Kontext des Webserver-Prozesses zur Ausführung gebracht. Der dabei erzielte Geschwindigkeitsvorteil ist, vor allem bei viel frequentierten Seiten, enorm." (Kofler und Öggl 2010, S. 81)
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 3
2.4.1
Sprachelemente von PHP
"Die Syntax von PHP ist ein wenig an die anderer Sprachen angelehnt, wie z. B. C, Shellscript,
Perl und sogar Java. Es ist in der Tat eine Mischsprache, die die besten Funktionen aus anderen
Sprachen nimmt und sie zu einer einfach verwendenden und leistungsfähigen Scriptsprache verbindet." (Gutmans et al. 2005, S. 55)
Folgende Themen bilden die Grundlagen von PHP:
2.4.1.1 HTML-Einbettung
Ein PHP-Code beginnt mit dem PHP-Tag <?php und endet mit dem PHP-Tag ?>. Diese Tags werden in den HTML-Code eingebettet. (vgl. Gutmans et al. 2005, S. 56)
"Die Besonderheit von PHP besteht darin, dass der Programmcode direkt in das HTML-Dokument
eingebettet wird. HTML- und PHP-Code befinden sich also in derselben Datei, wobei die PHPTaiel natürlich speziell markiert sind." (Kofler und Öggl 2010, S. 79)
2.4.1.2 Kommentare
Kommentare können z. B. wie in C++ verfasst werden:
"// Dies ist ein C++-artiger Kommentar, der am Zeilenende endet."
(Gutmans et al. 2005, S. 56)
2.4.1.3 Variablen
Variablen müssen vor der Verwendung nicht deklariert werden; es muss also nicht der Typ angegeben werden. Somit kann eine Variable ihren Typ ändern so oft dies gewollt wird.
Variablen steht ein $-Zeichen voran und können mit einem Buchstaben oder einem Unterstrich
beginnen. Beispiele:
$count, $_Obj, $A123
PHP unterstützt keine globalen Variablen. Variablen sind in ihrem Geltungsbereich lokal, und wenn
sie in einer Funktion erstellt werden, sind sie nur während der Lebensdauer der Funktion verfügbar. Im Hauptscript (nicht innerhalb einer Funktion) erstellte Variablen sind keine globalen Variablen; diese werden nicht in Funktionen angezeigt. Man kann aber unter Verwendung eines speziellen Arrays $GLOBALS[] auf sie zugreifen, indem der Namen der Variablen als String-Index verwendet wird.
$PI = 3.14;
$radius = 5;
$circumference = $GLOBALS[„PI“] * 2 * $GLOBALS[„radius“];
// Circumference = n * d
(vgl. Gutmans et al. 2005, S. 57–58)
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 4
2.4.1.4 Variable Variablen
Variablen können zur Laufzeit über den Namen erstellt und auf sie zugegriffen werden, Beispiel:
$name = „John“;
$$name = „Registered user“;
print $John;
Dieser Code gibt »Registered user« aus.
(vgl. Gutmans et al. 2005, S. 58)
2.4.1.5 Umgang mit Variablen
Für den Umgang mit Variablen gibt es drei Sprachfunktionen.
isset()
isset() überprüft, ob eine bestimmte Variable von PHP deklariert wurde. Wurde die Variable be-
reits gesetzt, gibt die Funktion den Wert true zurück, andernfalls, oder wenn die Variable den Wert
NULL hat, false.
unset()
unset() macht die Deklaration einer Variablen rückgängig und gibt allen genutzten Speicher frei,
sofern keine andere Variable den Wert referenziert. Ein Aufruf von isset() auf eine Variable, auf
die zuvor unset() angewendet wurde, ergibt false.
emty()
emty() kann verwendet werden, um zu überprüfen, ob eine Variable nicht deklariert wurde oder ihr
Wert false ist. Normalerweise prüft es, ob eine Formularvariable nicht gesendet wurde oder keine
Daten enthält.
(vgl. Gutmans et al. 2005, S. 59–60)
2.4.1.6 Superglobale Arrays
Als allgemeine Regel gilt, dass PHP keine globalen Variablen unterstützt (Variablen, auf die automatisch aus jedem Bereich zugegriffen werden kann). Bestimmte spezielle interne Variablen, die
Superglobals heißen und vordefiniert sind, verhalten sich jedoch ähnlich wie globale Variablen
anderer Sprachen; Beispiele:
$_GET[]
// Ein Array, das alle GET-Variablen enthält, die PHP vom Browser des Clients erhalten hat.
$_POST[]
//Ein Array, das alle POST-Variablen enthält, die PHP vom Browser des Clients erhalten hat.
$_Cookie[]
Ein Array, das alle Cookies, die PHP vom Browser des Clients erhalten hat. (vgl. Gutmans et al.
2005, S. 60)
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 5
Eine weitere Beschreibung dieser und anderer Superglobals würde an dieser Stelle zu weit führen.
2.4.1.7 Grundlegende Datentypen
In PHP gibt es acht verschiedene Datentypen. Fünf davon sind skalar, und die restlichen haben
jeweils ihre Besonderheit. Die zuvor behandelten Variablen können Werte aller dieser Datentypen
enthalten, ohne dass ihr Typ explizit deklariert werden muss. Das Verhalten der Variablen ergibt
sich aus dem Datentyp, den sie enthält. (vgl. Gutmans et al. 2005, S. 61)
Eine detaillierte Beschreibung der Datentypen Ganzzahlen, Fließkommazahlen, Strings, Bool´sche
Werte, NULL, Resources, Arrays und Konstanten würde an dieser Stelle den Rahmen die Ausarbeitung sprengen.
2.4.1.8 Operatoren
"In PHP gibt es drei Arten von Operatoren: Unär- und Binäroperatoren sowie einen Ternäroperator" (Gutmans et al. 2005, S. 74)
Auf Operatoren soll an dieser Stelle nicht weiter eingegangen werden.
2.4.1.9 Kontrollstrukturen
Steuerstrukturen können in zwei Gruppen eingeteilt werden: Bedingte Steuerung und Steuerung
von Schleifen. Die bedingte Steuerung beeinflusst den Ablauf des Programms und führt bestimmten Code aufgrund gewisser Kriterien aus der überspringt ihn, wohingegen die Steuerung von
Schleifen bewirkt, dass ein bestimmter Code gemäß angegebener Kriterien beliebig oft ausgeführt
wird. (vgl. Gutmans et al. 2005, S. 82)
Eine genauere Darstellung der Kontrollstrukturen würde an dieser Stelle zu weit führen.
2.4.1.10 Funktionen
"Eine Funktion in PHP kann eingebaut oder benutzerdefiniert sein; beide werden jedoch auf dieselbe Art aufgerufen." (Gutmans et al. 2005, S. 91)
Weiter soll auf dieses Thema nicht eingegangen werden.
2.4.2
PHP/MySQL-Schmittstellen (mysql, myqli, PDO)
Für den Zugriff in PHP-Code auf die MySQL-Datenbanken stehen momentan drei Schnittstellen
zur Wahl:
–
"mysql: Die mysql-Funktionen sind vielen PHP-Programmieren aus älteren PHP-Versionen
bekannt.
–
mysqli: Ab PHP 5.0 ermöglicht die objektorientierte Schnittstelle myqli eine elegantere Programmierung und gibt Zugang zu einigen neunen MySQL-Funktionen (z. B. die besonders effiziente Ausführung von SQL-Komandos mit Parametern durch sog. Prepared Statements).
–
pdo: Ab PHP 5.1 kann PHP mit MySQL auch über die PHP DAT Objects (PDO) kommunizieren. Dabei handelt es sich um eine Erweiterung für den einheitlichen Zugriff auf unterschiedliGunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 6
che Datenbanken. Diese Schnittstelle ist nicht MySQL-spezifische, sondern kann auch für andere Datenbanksysteme verwendet werden. Allerdings hat sich PDO zumindest im Zusammenspiel mit MySQL nicht durchsetzen können.
(vgl. Kofler und Öggl 2010, S. 407)
2.4.2.1 mysql-Funktionen
"Die mysql-Funktionen sind kein integraler Bestandteil von PHP, sondern eine Erweiterung." (Kofler und Öggl 2010, S. 409)
Deshalb müssen diese Funktionen unter Linux bzw. Windows zunächst integriert bzw. deren Aktivierung überprüft werden.
2.4.2.1.1
Verbindungsaufbau
Der Verbindungsaufbau wird mit mysql_connect ausgeführt. Dabei werden
1. der Rechnernahmen (Hostenamen) des MySQL-Servers
2. der MySQL-Benutzer
3. und das Passwort
übergeben, z. B.
$conn = mysql_connect("localhost", "username", "xxx");
In diesem Beispiel (Rechnername = localhost) läuft MySQL und das PHP-Skript auf demselben
Rechner.
(vgl. Kofler und Öggl 2010, S. 410)
2.4.2.1.2
SQL-Kommandos ausführen
Um SQL-Kommandos auszuführen, werden diese als Zeichenkette an die Funktion mysql_query
übergeben. Dabei kann mit mysql_query jede Art von SQL-Kommando ausgeführt werden - Abfragen mit SELECT, Veränderungen an den Daten mit INSERT, UPDATE und DELETE, etc.
Beispiel:
$result = mysql_query("SELECT COUNT (*) FROM titles");
(vgl. Kofler und Öggl 2010, S. 411)
2.4.2.1.3
SELECT-Ergebnisse auswerten
Bei der Ausführung einer SELECT-Abfrage mit mysql_query wird als Ergebnis ein Verweis auf eine
Tabelle mit rows Zeilen und cols Spalten erzeugt:
$result = mysql_query(SELECT * FROM titles");
$rows = mysql_num_rows($result);
$cols = mysql_num_fields($result);
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 7
Der Zugriff auf die einzelnen Felder der Tabelle kann so erfolgen:
1. einfach aber langsam
$item = mysql_result($result, $row, $col);
2. effizienter: Auswertung zeilenweise
–
$mysql_fetch_row (liefert einfachen Array)
–
$mysql_fetch_array (liefert assoziativen Array)
–
$mysql_fetch_assoc (liefert assoziatives Feld)
–
$mysql_fetch_object (liefert Objekt; der Zugriff auf die Spalten erfolgt mit
$row->colname).
(vgl. Kofler und Öggl 2010, S. 412–416)
2.4.2.1.4
Transaktionen
"Es gibt keine Funktionen zur Steuerung von Transaktionen." (Kofler und Öggl 2010, S. 416)
2.4.2.1.5
Fehlerabsicherung und Fehlersuche
Alle mysql_xxx-Funktionen liefern FALSE als Ergebnis, wenn es bei der Ausführung zu einem Fehler gekommen ist.
Informationen über die Art des Fehlers liefert die Auswertung der Funktionen mysql_errno (liefert
eine Fehlernummer) und mysql_error (Fehlermeldung).
"Manche mysql-Funktionen schreiben selbst Fehlermeldungen in die HTML-Ausgabe. (vgl. Kofler
und Öggl 2010, S. 416)
Die Fehlersuche gestaltet sich also als sehr schwierig und erfordert viel Geduld.
2.4.2.2 mysqli-Klassen, -Methoden und – Eigenschaften
"Die mysqli-Schnittstelle ermöglicht eine objektorientierte Programmierung des Datenbankzugriffs
auf MySQL und ist damit eine wichtige Hilfe auf dem Weg zu einem übersichtlicheren Code." (Kofler und Öggl 2010, S. 417)
Weitere Ausführungen zu diesem Thema würden allerdings in dieser Ausführung allerdings zu weit
führen. Insbesondere weil der praktische Teil mittels der o. g. mysql-Schnittstelle und nicht über
mysqli auf die Datenbank zugreift.
2.4.2.3 PHP Data Objects (PDO)
"Die PHP Data Objects (kurz PDO) erlauben einen objektorientierten Zugriff auf diverse Datenbanksysteme." (Kofler und Öggl 2010, S. 430)
Wie bereits erwähnt wird diese Art von Zugriff auf die Datenbank nicht im praktischen Teil verwendet. Deshalb wird auf eine weitere Beschreibung an dieser Stelle verzichtet.
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 8
3
II. Teil der Planung und Konzeption - Praktische Umsetzung
Mit Hilfe der theoretischen Grundlagen wird in diesem praktischen Teil eine Benutzerverwaltung
erstellt. Als Grundlage dieser Benutzerverwaltung wurde das PHP Loginsystem, das von der URL
http://www.mywebsolution.de/workshops/2/show_PHP-Loginsystem.html heruntergeladen werden
kann, verwendet. Im Folgenden werden nur die Bereiche beschrieben, die vom Autor dieser Ausarbeitung selbst angefertigt bzw. geändert wurden.
3.1
Konzeptionelle Modellierung: Abbildung der Realität im Entity-Relationship-Modell
(ER-Modell)
Zunächst wurde folgendes ER-Modell erstellt:
ID
Benutzername
Passwort
Registrierungsdatum
Vorname
Nachname
Benutzer
Autologin
n
E-Mail
IP
Hat Rolle
Telefonnummer
SessionID
Bild
Letzter Login
ID_Rolle
Letzte Aktion
Rollenname
1
n
Hat Recht
Rechtename
Abbildung 1: ER-Modell für Benutzerverwaltung
Die Benutzerverwaltung kennt also Rollen und Benutzer. Jeder Benutzer hat eine ID und ein
Passwort mit dem er sich bei dem System anmeldet.
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 9
Die Benutzerverwaltung erlaubt:
1) den Benutzer, mit Name, Vorname, E-mail, Telefonnumer, Bild und einer ID sowie Passwort anzulegen.
2) jeder Benutzer eine Rolle mit Rechten zu zuweisen, so dass alle Benutzer mit den gleichen
Rechte ausgestattet sind, die ihrer Rolle entspricht.
3.2
Logische Modellierung: Umsetzung des ER-Modells in ein relationales Modell
Aus dem ER-Modell ist folgendes rationale Modell erstellt worden:
User
(ID, Autologin, IP, SessionID, Benutzer, Passwort, Email, Vorname, Registrierungsdatum,
Nachname, Telefonnummer, Bild, Letzter_Login, Letzte_Aktion, ⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗
user_rollen (ID_Rolle, Rollenname, ⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗⃗
ID_Rolle
)
ID
)
rollen_rechte (ID, Rechte)
Das Attribut ID_Rolle der Relation user_rollen ist also bei der Relation user im Attribut Rolle
als Fremdschlüssel eingetragen. Das Attribut ID der Relation rollen_rechte ist bei der Relation
user_rollen im Attribut Recht als Fremdschlüssel eingetragen.
Dadurch wird sichergestellt, dass jedem User, dessen Daten in einer Tupel abgelegt sind, immer
nur eine Rolle zugeordnet werden kann. Auch wird jeder Rolle immer nur ganz bestimmte Rechte
zugewiesen. Damit ist die referenzielle Integrität gewahrt:
"Die Einschränkung bzw. Bedingung der referenziellen Integrität wird zwischen zwei Relationen
definiert und dient der Wahrung der Konsistenz zwischen den Tupeln zweier Relationen. Informell
besagt die referenzielle Integrität, dass ein Tupel der Relation, auf die sich ein Tupel einer anderen
Relation bezieht, existieren muss." (Elmasri und Navathe 2009, S. 144)
3.3
Physische Modellierung: Übertragung des relationalen Modells in physische Strukturen, also Umsetzung in eine mySQL-Datenbank
Aus dem relationalem Modell wird über die Oberfläche von phpMyAdmin eine MySQL-Datenbank
mit folgender Struktur erstellt:
Abbildung 2: Struktur der SQL-Datenbank
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 10
Dafür wurden über die SQL-Befehle CREATE TABLE die drei Tabellen angelegt und über INSERT
INTO mit Daten gefüllt. Im Anhang in der Datei benutzerverwaltung.sql befinden sich die vollständigen Befehle zum Erstellen der Datenbank.
Eine genaue Beschreibung der notwendigen SQL-Befehle ist nicht Schwerpunkt dieser Ausarbeitung.
3.4
Entwicklung der PHP-Anwendung: Zugriff auf die mySQL-Datenbank durch den Internet-Besucher
3.4.1
Aufbau des Codes
Der Code verteilt sich auf die folgenden Dateien:
autologaus.php
automatisches Ausloggen
functions.php*
Funktionen: Wortlänge prüfen, User ausloggen, …
index.php*
Startseite
login.php*
Login-Seite
logout.php
Seite nach dem Ausloggen
myprofil.php*
Seite zum Ändern des Profil durch den Benutzer
mysql.php*
Verbindung mit localhost
passwort.php*
Seite „Passwort vergessen“
profil.php*
Anzeige der Daten eines Benutzers
registrierung.php*
Registierungsformular
userliste.php*
Benutzerliste
admin/index.php*
Adminbereich
admin/user/index.php*
Prüfung, ob Benutzer Adminbereich betreten darf
admin/user/edit.php**
Benutzer ändern und Rolle zuweisen
admin/user/delete.php*
Benutzer löschen
admin/user/rolle.php***
Nach Auswahl einer Rolle werden die Benutzer angezeigt
admin/user/benutzerrollen.php*** Liste der Benutzer mit dazugehörigen Rollen, die sich
nach Rollenname oder Benutzername sortieren lassen.
*
Diese Dateien wurden vom Autor so verändert, dass die Attribute der Relationalen Datenbank angezeigt werden. Außerdem wurden die Texte und Links verändert.
**
Diese Datei wurde vom Autor so ergänzt, dass auch die Rollen zugewiesen werden können.
***
Diese Dateien wurden vom Autor erstellt.
Wie bereits oben erwähnt, soll im Folgenden nur auf die vom Autor erstellten Dateien eingegangen
werden, um zu zeigen, wie der Zugriff einer PHP-Anwendung auf eine SQL-Datenbank erfolgen
kann.
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 11
3.4.2
Wichtige Codefragmente
Der Benutzer, der für diesen Adminbereich zugelassen ist, kann die Seite admin/index.php aufrufen:
Abbildung 3: Auswahlmöglichkeiten im Adminbereich
Dort kann er über über den Link Rolle -> Benutzer die Datei rolle.php bzw. über Rollen und Benutzer die Datei benutzerrollen.php aufgerufen. Diese beiden Dateien werden im Folgenden beschrieben.
3.4.2.1 Benutzer einer ausgewählten Rolle anzeigen (rolle.php)
Der Code dieser Seite ist in zwei Bereiche unterteilt. Die beiden Teile werden durch eine IF-/ELSEAnweisung getrennt (siehe auch Kapitel „2.4.1.9 Kontrollstrukturen“). Dabei wird immer erst der 2.
Bereich dargestellt, weil die Bedingung des 1. Bereichs erst durch den 2. Bereich erfüllt werden
kann. Dies bedeutet konkret: erst wenn im 2. Bereich über einen Button die $post-Werte (siehe
auch Kapitel „2.4.1.6 Superglobale Arrays“) der ID_Rolle abgeschickt wurden, wird der 1. Bereich
angezeigt. Die beiden Code-Bereiche sind wie folgt aufgebaut:
2. Code-Bereich: ELSE-Anweisung
Durch den 2. Teil erhält der Administrator die Möglichkeit eine Rolle auszuwählen, für die er sich
die dazugehörigen Benutzer anzeigen lassen möchte:
Abbildung 4: Adminbereich - Rolle auswählen
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 12
Dieser 2. Bereich wird wie bereits erwähnt mit der ELSE-Anweisung eingeleitet. Danach wird eine
SELECT-Anfrage (siehe auch Kapitel „2.4.2.1.2 SQL-Kommandos ausführen“) an die Datenbank
gestartet. Dabei werden aus der Tabelle user_rollen die Werte der Spalten ID_Rolle und Rollenname abgefragt. Das Ergebnis wird in $result (siehe auch Kapitel „2.4.1.3 Variablen“) gespeichert.
Danach wird mit einer IF/ELSE-Anweisung unterschieden, ob Daten vorhanden sind oder nicht.
Falls keine Daten vorhanden sind (Abfrage über den Befehl: !mysql_num_rows($result)) („siehe
auch Kapitel 2.4.2.1.3 SELECT-Ergebnisse auswerten“), wird mit echo „Es befinden sich keine
Rollen in der Datenbank“ ausgeben. Falls Daten vorhanden sind, wird ein Formular (Befehl <form>)
mit dem ersten Eintrag (Anweisung: <option value\“0>) „Bitte eine Rolle auswählen“ angezeigt. Die
Zeilen-Werte (Anweisung $row) aus der Datenbank werden über den Befehl $row =
mysql_fetch_assoc ($result) (siehe auch Kapitel „2.4.2.1.3 SELECT-Ergebnisse auswerten“) ge-
holt. Dabei ist es wichtig, dass ein assoziatives Feld geliefert wird, da ansonsten die Werte der
Felder nicht als Arrays vorliegen (siehe auch Kapitel „2.4.2.1.3 SELECT-Ergebnisse auswerten“).
Die Anzeige der Werte erfolgt dann über das Auswahlmenü $row['Rollenname']. Den Abschluss
bildet ein Button mit dem Typ "submit" und dem Wert "Rolle auswählen" mit ID_Rolle, der dann im
1. Code-Bereich weiterverarbeitet wird.
1. Code-Bereich: IF-Anweisung
Durch den 1. Code-Bereich erhält der Anwender eine Aufstellung der Benutzer für die vorher ausgewählte Rolle:
Abbildung 5: Darstellung der Benutzer einer bestimmten Rolle
Wie bereits oben erwähnt, wird das im 2. Code-Bereich beschriebene Formular durch die ELSEAnweisung nur angezeigt, wenn der Benutzer noch keine Auswahl getroffen hat.
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 13
Trifft er eine Auswahl wird über zwei verschachtelte IF-Anweisungen festgelegt, dass der gesendete Wert beim Drücken des Buttons "Rolle auswählen" die ID_Rolle ist:
if(isset($_POST['ID_Rolle']) AND $_POST['ID_Rolle'] != 0) {
if(isset($_POST['submit']) AND $_POST['submit'] == 'Rolle auswählen'){ …
(zu isset() siehe auch Kapitel „2.4.1.5 Umgang mit Variablen“)
Es wird eine Tabelle über <table> geöffnet. Für diese Tabelle werden über eine SELECTAnweisung die Daten ID, user.Benutzer, user.Rolle, user_rollen.ID_Rolle,
user_rollen.Rollenname aus den beiden Tabellen user und user_rollen geholt, bei denen die Werte
von den Spalten Rolle und ID_Rolle beim gesendeten Wert ($_POST['ID_Rolle']) übereinstimmen:
WHERE Rolle = '".mysql_real_escape_string($_POST['ID_Rolle'])."'
AND ID_Rolle = '".mysql_real_escape_string($_POST['ID_Rolle'])."'
Das Ergebnis wird in $result hinterlegt. Die Zeilen-Werte ($row) aus der Datenbank werden wieder
über den Befehl $row = mysql_fetch_assoc ($result) geholt. Die Anzeige der Werte erfolgt diesmal
über $row['Benutzer']; es werden also die Benutzer in der oben begonnenen Tabelle angezeigt.
3.4.2.2 Benutzer einer ausgewählten Rolle anzeigen (benutzerrolle.php)
Auf die Verweise auf den theoretischen Teil wird im Folgenden verzichtet, da die Datei benutzerrolle.php die gleichen theoretischen Grundlagen wie die oben beschriebene Datei rolle.php ver-
wendet.
Diese Seite wird im Adminbereich durch den Link Rollen und Benutzer aufgerufen. Dabei wird eine
Liste aller Benutzer mit ihrer jeweiligen Rolle angezeigt.
Diese kann der Benuter über einen Knopf Nach Rollenname sortieren:
Abbildung 6: Anzeige der Benutzer mit jeweiliger Rolle sortiert nach Benutzer
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 14
Danach kann er die Benutzer und ihre jeweiligen Rollen Nach Benutzer sortieren, oder wieder nach
Rollenname, usw.:
Abbildung 7: Anzeige der Benutzer mit jeweiliger Rolle sortiert nach Rollename
Diese Datei benutzerrolle.php ist in drei Code-Bereiche durch eine IF-/ELSEIF-/ELSE-Anweisung
aufgeteilt. Dabei gibt der 3. Bereich die Bedingungen für den 1. Bereich vor, der wiederum die Bedingung für den 2. Bereich vorgibt. Es wird also beim Einstieg auf die Seite zunächst der 3. Bereich angezeigt. Klickt der Benutzer auf Nach Rollenname sortieren ist die Bedingung für den
1. Bereich erfüllt, der dann angezeigt wird. Klickt der Benutzer hier im 1. Bereich auf Nach Benutzer
sortieren, ist die Bedingung für den 2. Bereich erfüllt. Somit wird der 2. Bereich angezeigt. Im
2. Bereich kann der Benutzer auf Nach Rollenname sortieren klicken. Dadurch ist wieder die Bedingung des 1. Bereichs erfüllt, der dann wieder angezeigt wird. Durch diese drei Bereiche ist es dem
Benutzer möglich, wahlweise die Daten entweder nach Rollenname oder nach Benutzer zu sortieren. Nun zur genaueren Darstellung des Aufbaus der drei Bereiche:
3. CODE-Bereich: ELSE-Anweisung
Der 3. Bereich wird wie bereits oben erwähnt beim Einstieg auf diese Seite angezeigt. Er beginnt
mit einem Button Nach Rollenname sortieren (Anweisung: <form …>). Im Gegensatz zum Code in der
Datei rolle.php wird beim Klicken auf den Button nicht ein Wert aus der Datenbank weiter gegeben, sondern ein Text (Anweisung: value=\"Nach Rollenname sortieren\).
Außerdem wird eine Tabelle (Anweisung <table>) erstellt. Die Daten der Tabelle werden über eine
SELECT-Anweisung aus der Datenbank abgefragt, wobei die WHERE-Anweisung
Rolle = ID_Rolle sicherstellt, dass nur die Zeilen aus den Tabellen user und user_rollen ausge-
wählt werden, bei denen die Werte von Rolle und ID_Rolle identisch sind. Diese Daten sind über
die Anweisung ORDER BY user.Benutzer ASC nach den Benutzernamen sortiert.
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 15
Das Ergebnis wird in $result hinterlegt. Die Zeilen-Werte ($row) aus der Datenbank werden wieder
über den Befehl $row = mysql_fetch_assoc ($result) geholt. Die Anzeige der Werte erfolgt diesmal
in der einen Spalte der Tabelle über $row['Benutzer'] und in der anderen Spalte über
$row['Rollenname']; es werden also die Benutzer und die jeweiligen Rollennamen in der oben be-
gonnenen Tabelle angezeigt.
1. CODE-Bereich: IF-Anweisung
Klickt der Benutzer auf den im 3. Code-Bereich beschriebenen Button Nach Rollenname sortieren,
erfüllt dieser Wert im 1. Code-Bereich die IF-Anweisung:
if(isset($_POST['submit']) AND $_POST['submit'] == 'Nach Rollenname sortieren') { …
Es wird also der nachfolgende Code des 1. Bereichs ausgeführt. Dieser ist wieder analog dem 3.
Bereich aufgebaut. Mit zwei Ausnahmen:
1.
Das zuerst aufgeführte Formularfeld zeigt und verschickt den Wert Nach Benutzer sortieren.
2.
Die SELECT-Anfrage sortiert jetzt nach den Rollennamen: ORDER BY user_rollen.Rollenname
ASC.
Es werden durch die SELECT-Anfrage also alle Benutzer mit den dazugehörigen Rollennamen
sortiert nach den Rollennamen in einer Tabelle angezeigt.
2. CODE-Bereich: ELSEIF-Anweisung
Klickt der Benutzer im 1. Code-Bereich auf den Button Nach Benutzer sortieren, erfüllt dieser Wert
im 2. Code-Bereich die ELSEIF-Anweisung:
elseif(isset($_POST['submit']) AND $_POST['submit'] == 'Nach Benutzer sortieren') {…
Es wird also der nachfolgende Code des 2. Bereichs ausgeführt. Dieser ist wieder analog dem
1. Bereich aufgebaut. Mit zwei Ausnahmen:
3.
Das zuerst aufgeführte Formularfeld zeigt und verschickt den Wert Nach Nach Rollenname sortieren.
4.
Die SELECT-Anfrage sortiert jetzt nach den Benutzernamen: ORDER BY user.Benutzer ASC.
Es werden durch die SELECT-Anfrage also alle Benutzer mit den dazugehörigen Rollennamen
sortiert nach den Benutzernamen in einer Tabelle angezeigt.
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 16
4
Fazit und Ausblick
Die PHP-Anwendung für die Benutzerverwaltung wurde auf der Grundlage einer MySQLDatenbank wie folgt erstellt:
-
Konzeptionelle Modellierung: Abbildung der Realität in Entity-Relationship-Modell (ERModell)
-
Logische Modellierung: Umsetzung des ER-Modells in ein relationales Modell
-
Physische Modellierung: Übertragung des relationalen Modells in physische Strukturen, also Umsetzung in eine mySQL-Datenbank
-
Entwicklung der PHP-Anwendung: Zugriff auf die mySQL-Datenbank durch den InternetBesucher (Schwerpunkt dieser Ausarbeitung)
Die vorliegende Benutzerverwaltung ermöglicht, eine Anwendung vor neugierigen Augen nicht
registrierter Benutzer zu schützen. Die Benutzer können sich mit Vornamen, Nachnamen, E-Mail,
Bild und weiteren Daten in die SQL-Datenbank über eine PHP-Anwendung eintragen. Der Administrator kann die Benutzer verwalten und ihnen Rollen mit Rechten zuweisen. Außerdem stehen
ihm Sichten für die Anzeige der Benutzer einer zuvor ausgewählten Rolle sowie einer Tabelle mit
den Benutzer und ihren dazugehörigen Rollen, die nach Benutzer oder Rollen sortiert werden
kann, zur Verfügung. An Hand dieser beiden Sichten (rolle.php und rollenbenutzer.php) wird in
dieser Ausarbeitung der Zugriff der PHP-Anwendung auf die SQL-Datenbank beschrieben.
Der lauffähige Quellcode dieser Ausarbeitung befindet sich auf der beiliegenden CD und ist im
Anhang abgedruckt.
Für die Entwicklung einer Benutzerverwaltung sind umfangreiche theoretische und praktische
Kenntnisse erforderlich, die in dieser kurzen Ausarbeitung nur annährend beschrieben werden
können.
Die vorliegende rudimentäre Benutzerverwaltung könnte in folgenden Bereichen optimiert werden:
-
Nur ein Benutzer mit der Admin-Rolle sollte Zugriff auf Auswertung von den Benutzerdaten
haben. So ist z. B. die Datei userliste.php jedem Anwender ohne Anmeldung zugänglich.
-
Durch die Formatierung des Textes mit Hilfe von Cascading Style Sheets (CSS) ergeben
sich zahlreiche Möglichkeiten, die Seiten einer Anwendung einheitlich zu gestalten. (vgl.
Theis 2011, S. 145–147)
-
Der Zugriff auf die Datenbank könnte nicht wie im vorliegenden Fall über die mysql- sondern
über die mysqli-Schnittstelle erfolgen. "Die mysqli-Schnittstelle ermöglicht eine objektorientierte Programmierung des Datenbankzugriffs auf MySQL und ist damit eine wichtige Hilfe
auf dem Weg zu einem übersichtlicheren Code.
Ein zweiter Vorteil von mysqli im Vergleich zur älteren mysql-Schnittstelle besteht darin, dass
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Entwicklung einer Benutzerverwaltung, Seite 17
damit sehr effizient SQL-Kommandos mit Parametern ausgeführt werden können [Prepared
Statements]." (Kofler und Öggl 2010, S. 417)
-
"Vertrauen Sie niemanden, insbesondere nicht den Benutzer Ihrer Webanwendung. Benutzer tun immer unerwartete Dinge, entweder mit Absicht oder zufällig, und können daher Fehler oder Sicherheitslücken in Ihrer Site entdecken." (Gutmans et al. 2005, S. 163) In diesem
Sinne sollten einige Techniken (Eingabeprüfung, HMAC-Überprüfung, PEAR::Crypt HMAC,
Eingabefilter, Mit Passwörtern arbeiten, Fehlerbehandlung) angewandt werden, bevor eine
Benutzerverwaltung tatsächlich ins Netz gestellt wird. (analog Gutmans et al. 2005, S. 166–
176)
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Verzeichnisse, Seite 1
5
5.1
Verzeichnisse
Literaturverzeichnis
Elmasri, Ramez; Navathe, Sham (2009): Grundlagen von Datenbanksystemen. Bachelorausgabe.
3. Aufl. München [u.a.]: Pearson Studium.
Gutmans, Andi; Bakken, Stig Saether; Rethans, Derick (2005): PHP 5 aus erster Hand. Das
Entwicklerhandbuch für Profis. München ;, Boston [u.a.]: Addison-Wesley.
Kline, Kevin E.; Kline, Daniel; Hunt, Brand (2005): SQL in a nutshell. 2. Aufl. Beijing ;, Cambridge ;,
Farnham ;, Köln ;, Paris ;, Sebastopol ;, Taipei ;, Tokyo: O'Reilly.
Kofler, Michael; Öggl, Bernd (2010): PHP 5.3 & MySQL 5.4. Programmierung, Administration,
Praxisprojekte. München, Boston, Mass. [u.a.]: Addison-Wesley.
Landau, Pascal: PHP Loginsystem. Online verfügbar unter
http://www.mywebsolution.de/workshops/2/show_PHP-Loginsystem.html, zuletzt geprüft
am 13.04.2012.
Rupp, Susanne (2009): Dreamweaver CS4. Professionelle Webseiten entwickeln ; [DVD, XAMPP,
Tools CS4-Testversionen]. München/Germany: Markt + Technik.
Theis, Thomas (2011): Einstieg in PHP 5.3 und MySQL 5.5. [für Programmieranfänger geeignet;
Einführung in die Webprogrammierung; Grafiken, PDF, Flash-Anwendungen und E-Mail;
Objektorientierung verständlich erklärt]. Bonn: Galileo Press.
Wilfing, Benjamin; org, benjamin wilfing@selfhtml (2005): PHP: Sessionbasiertes Loginsystem.
Benjamin Wilfing, [email protected]. Online verfügbar unter
http://aktuell.de.selfhtml.org/artikel/php/loginsystem/, zuletzt aktualisiert am 12.07.2009,
zuletzt geprüft am 13.04.2012.
5.2
Bildverzeichnis
Abbildung 1: ER-Modell für Benutzerverwaltung .................................................................................. 8
Abbildung 2: Struktur der SQL-Datenbank ............................................................................................ 9
Abbildung 3: Auswahlmöglichkeiten im Adminbereich ........................................................................ 11
Abbildung 4: Adminbereich - Rolle auswählen .................................................................................... 11
Abbildung 5: Darstellung der Benutzer einer bestimmten Rolle .......................................................... 12
Abbildung 6: Anzeige der Benutzer mit jeweiliger Rolle sortiert nach Benutzer.................................. 13
Abbildung 7: Anzeige der Benutzer mit jeweiliger Rolle sortiert nach Rollename ............................... 14
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de
Verzeichnisse, Seite 2
5.3
Anhang
1. Ausdruck SQL-Anweisung für Datenbank
2. CD mit lauffähigem Quellcode
Gunther Ehrhardt | Bahnstraße 1 | 97256 Geroldshausen
Tel. 09366 980959 | Fax 09366 980960 | E-Mail [email protected]
www.buero-update.de