Moderiertes Gästebuch mit Zugriffsschutz auf Administrationsseite unter Verwendung einer MySQL-Datenbank erstellt mit dem Dreamweaver Übungsziel Gästebuch mit Datenbank ........................................................... 3 Tabelle zum Speichern der Gästebucheinträge erstellen .................................. 4 Neue Datenbank mit phpMyAdmin erstellen ................................................... 4 Die Tabelle erstellen ................................................................................... 4 Felder eingeben ......................................................................................... 4 Sitemap des fertigen Gästebuchs ................................................................. 5 Eingabeformular (gb_eingabe.php) im DRW erstellen...................................... 6 MySQL-Verbindung erstellen ............................................................... 6 Erstellung Datensatzgruppe ................................................................ 8 Einfügen von Datensätzen .................................................................. 8 Assistent: "Einfügeformular für Datensätze" ......................................... 8 Formularüberprüfung ................................................................................ 10 Exkurs: Formulare überprüfen per JavaScript (mit dem DRW)........................ 10 Exkurs: Formularüberprüfung mit der DRW -Extension checkform.mxp ........... 11 Anzeige der Gästebucheinträge .................................................................. 11 Datensatzgruppe erstellen ................................................................................ 11 Einen wiederholten Bereich einfügen .............................................................. 12 Datensatzgruppen-Navigationsleiste einfügen ............................................... 14 Datensatzgruppen-Navigationsstatus einfügen .............................................. 15 Gästebuch-Administrations-Seite (gb_admin.php) einfügen ........................... 16 Datensatzgruppe erstellen .................................................................................... 19 Wiederholten Bereich einfügen............................................................................. 19 Formular zum Freischalten erstellen.................................................................... 20 Datensatz aktualisieren................................................................................................ 21 Formular zum Sperren erstellen........................................................................... 21 Formular zum Löschen erstellen .......................................................................... 22 Datensatz löschen ........................................................................................................ 22 Zugriffsschutz für Administrationsseiten einfügen ......................................... 23 Datei: gb_login.php ...................................................................................................... 23 Serververhalten "Benutzer anmelden" hinzufügen ............................................ 24 Datei: gb_admin.php ................................................................................................... 24 Serververhalten "Zugriff auf Seite beschränken" einfügen ............................... 24 Serververhalten "Benutzer abmelden" ................................................................ 25 Anhang: Quellcode ................................................................................... 26 Datensicherung: gaestebuch2012.sql ........................................................................ 26 Datenbank: gaestebuch2012 ...................................................................................... 28 Die Datenbank gaestebuch2012 enthält 2 Tabellen: ......................................... 28 Tabelle: gaestebuch .............................................................................................. 28 Tabelle: nutzer ....................................................................................................... 28 Dateiliste: ............................................................................................... 29 Datei: gaestebuch.css ....................................................................................... 29 Datei: gb_admin.php ........................................................................................ 29 Datei: gb_anzeige.php ...................................................................................... 32 Datei: gb_eingabe.php ...................................................................................... 34 Datei: gb_funktionen.inc.php ........................................................................... 37 Datei: gb_login.php ........................................................................................... 37 Datei: gb_verweigert.php ................................................................................. 38 © Mag. Erwin Mayer, Nov 2012 VBS Akademiestraße Datei: connections/vb_gb.php ......................................................................... 39 © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 2/39 Aufgabenstellung: Erstellen Sie ein Gästebuch mit folgenden Anforderungen (Pflichtenheft): Die Benutzer des Gästebuchs können Einträge gestalten, die nach Genehmigung (Freischaltung) durch den Gästebuch-Administrator veröffentlicht werden. Die neuesten Einträge sollen zuerst angezeigt werden. Die Administrationsseite (gb_admin.php) soll das Freischalten, Sperren und Löschen der Daten benutzerfreundlich ermöglichen. Der Zugriff auf die Administrationsseite soll geschützt sein. Vorschlag für die Reihenfolge der Erstellung: Anlegen der Tabelle gaestebuch in der Datenbank gaestebuch2012 mit Hilfe von phpMyAdmin Eingabe von Testdaten Erstellung Eingabeformular (gb_eingabe.php) Erstellen der Anzeigeseite (gb_anzeige.php) Erstellung der notwendigen Funktionen (gb_function.inc.php) und Einbindung mit include in die entsprechenden Seiten. Formatierung mit CSS (gb_style.css) Erstellung der Administrationsseite (gb_admin.php) Anlegen der Tabelle nutzer in der Datenbank gaestebuch2012 mit Hilfe von phpMyAdmin für den Zugriffsschutz Zugriffsschutz für die Administrationsseite einfügen zusätzliche Features: Anstatt der Werte 1 und 0 für freigabe geben Sie das Wort "freigeschaltet" bzw. "gesperrt" aus. Das Datum (jetzt im Format JJJJ-MM-TT) ist im deutschen Format "18. Okt. 2010" ausgeben. Hinweis: Schreibe dazu eine Funktion dtdatum(Datum im Datenbankformat), die das Format der Datenbank in die deutsche Schreibweise umwandelt. Lesen Sie dazu das Kapitel 10.4. aus dem Herdt-Skriptum PHP5 – Grundlagen (Erstellung dynamischer Webseiten) Auf der Administrationsseite werden die einzelnen Tabelle werden mit rotem Hintergrund (=gesperrt) bzw. grünem Hintergrund (=freigeschaltet) ausgegeben werden. Hinweis: Schreibe dazu eine Funktion gesperrt(Prüfkennzeichen), der das Prüfkennzeichen übergeben wird und die den Text gesperrt bzw. freigeschaltet ausgibt. Verwenden Sie diese Funktion auch für die Formatierung der Hintergründe (rot und grün) der entsprechenden Tabellen mit Klassenformaten mit demselben Namen: "class='gesperrt'" bzw. "class='freigeschaltet'" Schreibe Sie alle diese Funktionen in die Datei gb_functions.inc.php und binden Sie diese Datei mit include in die gb_admin.php und gb_anzeige.php ein. Übungsziel Gästebuch mit Datenbank Diese Übung soll eine Einführung in die Arbeit mit MySQL-Datenbanken mit Hilfe des Dreamweavers bieten. Darüber hinaus soll der Umgang mit dem MySQL-Datenbanken-Verwaltungstool phpMyAdmin geübt werden. © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 3/39 Tabelle zum Speichern der Gästebucheinträge erstellen Neue Datenbank mit phpMyAdmin erstellen Starten Sie phpMyAdmin (hier Version 3.5.2) und legen Sie eine neue Datenbank an, wenn Sie keine vorhandene verwenden. Reiter Datenbank: Die Tabelle erstellen Klicken Sie auf Und geben Sie folgende Felder ein: Felder eingeben Name Beschreibung Zusätzliche Angaben: ID Autozähler (auto_increment) zur eindeutigen Identifikation eines Datensatzes name Für den Namen des Absenders email Für die E-Mail-Adresse betreff Für den Betreff meldung Für die Botschaft datum Datum des Eintrags freigabe Standardwert = 0, wird auf 1 gesetzt, wenn der Datensatz bzw. Eintrag gesichtet und für OK befunden wurde Veröffentlichung UNSIGNED = ohne Verwendung des Vorzeichens SMALLINT reicht für 65535 Einträge Primärschlüsselfeld VARCHAR(255) reicht für maximal 255 Zeichen VARCHAR(255) reicht für maximal 255 Zeichen VARCHAR(255) reicht für maximal 255 Zeichen TEXT (Zeichenkette mit maximal 65535 Zeichen = 64 KB) DATE = Feld zum Speichern des Datums im Format YYYY-MM-DD ('2010-10-31') TINYINT (= sehr kleine Ganzzahl von 128 bis +127 reicht hier, da der Wert nur -1 und 1 annehmen kann) © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 4/39 Nun ist die Tabelle zum Speichern der Gästebucheinträge fertig! Sitemap des fertigen Gästebuchs Gästebuch gb_eingabe.php gb_anzeige.php neuen Gästbucheintrag erstellen zeigt freigeschaltete Gästbucheinträge seitenweise an Tabelle: gaestebuch Administration mit Zugriffsschutz ID name email betreff meldung datum freigabe Anmeldung gaestebuch.css Enthält alle CSS-Formate gb_funktionen.inc.php Enthält die Funktionen: gesperrt() gibt "gesperrt" bzw "freigeschaltet" aus dtdatum() wandelt Datum in Datum mit deutscher Schreibweise um Verwaltungsseite (geschützte Seite) gb_login.php enthält Anmeldungsformular --Serververhalten: Benutzer anmelden Anmeldung erfolgreich --> Sprung zur Anmeldung fehlgeschlagen --->zurück zur Anmldg Tabelle: nutzer eingebundene Dateien: gb_admin.php zeigt alle Gästbucheinträge zum Freigeben/Sperren/Löschen an. --Serververhalten: Zugriff auf Seite beschränken --Serververhalten: Benutzer abmelden Bei unberechtigtem Aufruf --> zur Anmeldung id name passwort © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 5/39 Eingabeformular (gb_eingabe.php) im DRW erstellen Öffnen Sie eine neue dynamische Datei und speichern Sie sie unter dem Namen gb_eingabe.php. Eine offene Datei ist Voraussetzung um eine MySQLVerbindung erstellen zu können. Eingabeformular zum Eingeben neuer Einträge (gb_eingabe.php), bereits mit CSS formatiert MySQL-Verbindung erstellen Wie erstellt man eine MySQL-Verbindung? Fenster: Datenbanken Reiter: Datenbanken Klick auf MySQL-Verbindung Es erscheint folgender Dialog (MySQL-Verbindung): Sie geben ein: MySQL-Server: localhost, lokale Standardpasswörter XAMPP in passwords.txt Benutzername: root, Kennwort keines und als Datenbank wählen Sie die gewünschte (existierende) Datenbank (hier gaestebuch2012) aus. Dann testen Sie die Verbindung: Klick auf „Testen“ Der DRW weist Sie darauf hin, dass ein Kennwort wünschenswert wäre: Sie klicken das Kontrollkästchen (Diese Meldung nicht mehr zeigen ) an und bestätigen mit OK Nun sollte folgende Meldung erscheinen: Verbindung wurde erfolgreich erstellt! © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 6/39 Alles klar!? Der DRW hat nun eine Verbindung (vb_gb) erstellt: Im Reiter Datenbanken sehen Sie nun die Verbindung zur Tabelle gaestebuch(geöffnet): Zusätzlich wurden nun zwei Verzeichnisse angelegt: Das Verzeichnis Connections müssen Sie beim Veröffentlichen auf den Webserver mitübertragen. Das Verzeichnis _mmServerScripts veröffentlichen Sie aus Datenschutzgründen keinesfalls, am besten löschen Sie die Verbindungsskripte mit Site/Erweitert/Verbindungsskripte entfernen Gegebenenfalls sind vorher noch in der Verbindungsdatei vb_gb.php (im Verzeichnis Connections) noch Anpassungen (an den Datenbanknamen des Webservers bzw. Usernamen, usf) vorzunehmen. (Sie können auch gleich den Datenbanknamen des Host-Servers lokal verwenden, dann ersparen Sie sich die Änderungsarbeit!) Abb.: vb_gb.php Im Moment testen wir unser Gästebuch jedoch nur lokal. Nun weiter mit unserem Eingabeformular (gb_eingabe.php). Für den Zugriff auf die Datenbank benötigen wir eine Datensatzgruppe. Falls man diese vergisst, so wird man daran erinnert! © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 7/39 Erstellung Datensatzgruppe Entweder über die Bedienfeldgruppe Anwendung, Reiter: Bindungen + oder über das Symbol erstellen Sie eine Datensatzgruppe. Abb.: neue Datensatzgruppe (record set), geöffnet Einfügen von Datensätzen Wir haben nun zwei Möglichkeiten: Formular selbst erstellen und Daten in Datenbank übertragen lassen (mit Serververhalten Datensatz einfügen) oder den Assistenten „Einfügeformular für Datensätze“ zu verwenden, der uns das Formular „automatisch“ generiert, zu verwenden. Wir wählen die letztere, die bequemere Methode: Assistent: "Einfügeformular für Datensätze" Wir wählen unsere Verbindung: vb_gb Unsere Tabelle: gaestebuch Wohin soll er nach dem erfolgreichen Einfügen des Datensatzes gehen? Wir könnten eine eigene Datei (gb_bestaetigung.php) mit der entsprechenden Erfolgsmeldung ("Datensatz eingetragen!") erstellen mit einem Link auf die -noch nicht existierende - Anzeige (gb_anzeige.php) © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 8/39 Abb.: ausgefülltes Dialogfeld Der DRW schlägt uns nun alle Felder vor, die in der Tabelle vorhanden sind, wir benötigen aber nicht alle. Beachten Sie: ID benötigen wir nicht, wird automatisch erzeugt (auto_increment) freigabe benötigen wir auch nicht: wird automatisch vergeben: 0 (über Standardwert in der Datenbanktabelle) Änderungen: meldung soll ein mehrzeiliges Textfeld sein. -> ändern Bei datum wollen wir das aktuelle Datum eintragen lassen: als verstecktes Feld übertragen Wir haben zwei Möglichkeiten: im Codefenster (die Funktion date('Y.m.d')erzeugt ein Datumsformat, wie es in der MySQL-Datenbank verwendet wird (z. B. 2010.12.31). <input name="datum" type="hidden" id="datum" value="<?php echo date('Y.m.d'); ?>"> Oder im Eigenschaftsfenster: Als Resultat finden wir in der Fenster: Serververhalten Datensatz einfügen(Formular, Verbindung, Tabelle) Zusätzlich noch ein dynamisches Textfeld (datum) welches wir vorhin erstellt haben Aufgabe: Testen (einen oder mehrere Datensätze erstellen) und Datenbanktabelle in phpMyAdmin anschauen © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 9/39 Wenn wir das Sprungziel nach der Eingabe noch nicht ausgefüllt haben, so könnten wir dies jederzeit ändern(Dies könnte ev.die Datei gb_bestaetigung oder gleich gb_anzeige.php sein!): Dazu öffnen Sie das Serververhalten Datensatz einfügen: Sie tragen hier das entsprechende Sprungziel ein! Formularüberprüfung Jedes Formular welches eingegebene Daten in eine Datenbank schreibt gehört überprüft (siehe Datenintegrität bzw. Datenkonsistenz). Dazu bietet der Dreamweaver das Verhalten Formularüberprüfung (siehe Merkblatt) an: Formular zur Gänze markieren (bequem mit dem TAG-Editor auf <form>). Dann Fenster Tag-Inspektor, Reiter Verhalten anklicken. Dann [+] markieren Formular überprüfen Diese Formularüberprüfung bietet nur schlichte, englische Überprüfung per JavaScript(ob ein Wert erforderlich ist, eine Zahl in einem bestimmten Bereich und ob eine E-Mail-Adresse ein @-Zeichen enthält). Exkurs: Formulare überprüfen per JavaScript (mit dem DRW) www.erwin-mayer.at/mmwd_beispiele/Formulare_ueberpruefen_per_JavaScript.pdf © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 10/39 Exkurs: Formularüberprüfung mit der DRW -Extension checkform.mxp Eine bessere Leistung bietet die Dreamweaver –Extension von Yaromat. Zuerst installieren: chekform.mxp doppelt anklicken (DreamweaverExtension-Manager öffnet sich) oder über Menü: Hilfe/Erweiterungen verwalten/dann Installieren. Zugriff über Formular zur Gänze markieren (bequem mit dem TAG-Editor auf <form>). Dann Fenster Tag-Inspektor, Reiter Verhalten anklicken. Dann [+] markieren yaromat checkform aufrufen und für alle Formularfelder die entsprechenden Optionen festlegen www.erwinmayer/mmwd_beispiele/Formularueberpruefung_mit_der_DRW_extension_checkform.pdf Extension: www.erwin-mayer/mmwd_beispiele/checkform.mxp Anzeige der Gästebucheinträge Sie speichern eine neue dynamische Seite unter dem Namen gb_anzeige.php ab. Für das Grundgerüst nehmen Sie eine Tabelle mit drei Zeilen und drei Spalten. Für die Daten setzen Sie bei ein paar Datensätzen freigabe auf 1 (=Veröffentlichen). So soll das fertige Gästebuch (gp_anzeige.php ) aussehen (CSS-formatiert) Datensatzgruppe erstellen Nun werden die Daten eingefügt: In der Fenster: Bindungen klicken Sie auf die Schaltfläche mit dem Pluszeichen( Datensatzgruppe. © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch ), und wählen Sie Seite 11/39 Alternativ können Sie auch das entsprechende Symbol "Datensatzgruppe" aus der Symbolleiste Anwendungen verwenden. Sie legen nun eine neue Datensatzgruppe (Recordset) an: Benennen Sie die Datensatzgruppe immer mit einem sinnvollen Namen (hier: rs_ausgabe). Sie wissen dann später: Alle Felder (Spalten) aus dem Gästebuch, die freigeschaltet (freigabe = 1) worden sind, also angezeigt werden sollen. Spalten nehmen wir immer alle, wir können später noch genauer auswählen. Wir wollen jedoch nur jene Beiträge veröffentlichen, die als Kennzeichen (Datenbankfeld: freigabe) einen 1er enthalten. Als Filter verwenden wir daher das Feld freigabe, wenn es dem von uns eingegebenen Wert = 1 entspricht. Wir sortieren die Beiträge nach der Zeit absteigend (der letzte Beitrag sollte oben stehen). Wenn Sie auf Testen klicken, so sehen Sie die aktuelle Auswahl an Datensätzen, die jetzt getroffen würde In der Fenster: Bindungen klicken Sie auf das Plus (+) vor der neuen Datensatzgruppe (rs_anzeigen), um sie zu öffnen: Nun können die einzelnen Datenbankfelder per Drag and Drop auf das Entwurfsfenster gezogen und auf dem richtigen Platz fallengelassen werden. Das Feld name fügen wir in der ersten Zelle der Tabelle ein. Die E-Mail-Adresse gleich daneben (abgegrenzt mit runden Klammern). In die Zelle daneben kommt das Datum, usf. In den letzten beiden Zeilen können Sie die Zellen verbinden. Wenn Sie jetzt die Anzeige testen, so sehen Sie nur den ersten Datensatz! Wir müssen noch einen wiederholten Bereich einsetzen! Einen wiederholten Bereich einfügen Markieren Sie dazu die Tabelle mit den eingefügten Datenbankfeldern und klicken Sie auf das Symbol Wiederholter Bereich oder alternativ Fenster: Serververhalten auf das Pluszeichen( )und wählen dann aus dem Menü Bereich wiederholen. Wir möchten nur 3 Gästebucheinträge gleichzeitig auf einer Seite sehen daher: © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 12/39 Nach der Tabelle noch ein RETURN eingefügt (zwecks Abstand der Einträge zueinander) und schon ist das Gästebuch fertig: Fertiges Gästebuch (in der Entwurfsansicht): © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 13/39 Datensatzgruppen-Navigationsleiste einfügen Wir geben nun die ersten drei Datensätze von unserem Gästebuch aus. Was geschieht, wenn mehr als diese zur Veröffentlichung freigegeben wurden. Um alle möglichen Datensätze durchblättern zu können benötigen wir eine Navigationsleiste. Wir fügen die Navigationsleiste einfach mit Hilfe des Symbols Datensatzgruppen-Navigationsleiste ein. Exkurs: Dies würde alternativ auch über das Menü der Fenster: Serververhalten gehen, erfordert jedoch mehrere einzelne Aktionen Beispiel: Da auf der ersten Seite die ersten beiden Links unnötig sind (Sie befinden sich ja auf der ersten Seite und es gibt daher kein zurück) müssten sie beide ausblenden (nicht anzeigen), da sie funktionslos sind. Auch das ist möglich: (Menü: Bereich anzeigen, Anzeigen, wenn nicht erste Seite) Genauso verhält es sich mit der letzten Seite, hier ist der Link Vor und Letzter sinnlos. (Menü: Bereich anzeigen, Anzeigen, wenn nicht letzte Seite) Zusammenfassung: Symbol Menübefehl AnzeigeSymbol Menübefehl zur Anzeige Darstellung Zur ersten Seite verschieben Zur vorherigen Seite verschieben Zur nächsten Seite verschieben Zur letzten Seite verschieben Anzeigen, wenn nicht erste Seite Erster Anzeigen, wenn nicht erste Seite Zurück Anzeigen, wenn nicht letzte Seite Vor Anzeigen, wenn nicht letzte Seite Letzter Nun ist jedenfalls klar warum so viele Aktionen in der Fenster: Serververhalten auftauchen. All dies lässt sich auf einen Streich erledigen, in zwei Versionen (Text und Grafik): Wir fügen die Navigationsleiste einfach mit Hilfe des Symbols Datensatzgruppen-Navigationsleiste ein. Symbol: Datensatzgruppen-Navigationsleiste © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 14/39 Darstellung (im Entwurf, dann im Browser) Textversion: Darstellung (im Entwurf, dann im Browser) Bilderversion: Datensatzgruppen-Navigationsstatus einfügen Zu guter letzt wollen wir auch noch zur besseren Orientierung den DatensatzgruppenNavigationsstatus ausgeben: Im Entwurf sieht dies so aus: Dies ist auch einzeln zu haben: Symbole Im Menü: Anzahl der Datensätze anzeigen Start-Datensatz End-Datensatz Erste Datensatznummer anzeigen Letzte Datensatznummer anzeigen Datensätze gesamt Datensätze gesamt anzeigen Nun ist die Gästebuch-Seite wirklich fertig! So soll das fertige Gästebuch (gp_anzeige.php ) in Entwurfsansicht aussehen (CSS-formatiert) © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 15/39 Gästebuch-Administrations-Seite (gb_admin.php) einfügen Zur einfachen Verwaltung so eines moderierten Gästebuchs ist unbedingt eine Verwaltungsseite notwendig. Sie müssen ja permanent Beträge freischalten bzw. unerwünschte Beiträge löschen. Eine Verwaltung mit phpMyAdmin ist dem User nicht zuzumuten bzw. die Arbeit direkt am Server (wie wir es vorhin zum Testen gemacht haben) ist für Ungeübte riskant (ein falscher Klick und die Tabelle ist gelöscht!). © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 16/39 © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 17/39 So soll die fertige Administrationsseite für das Gästebuch aussehen: Schaltfläche zum Löschen eines Datensatzes, Schaltfläche zum Freischalten eines Datensatzes und Schaltfläche zum Sperren eines Datensatzes (wenn man das Freischalten rückgängig machen wollte). Darüber hinaus wurden die einzelnen Tabelle mit einem CSS-Format formatiert, die von Prüf-Kennzeichen abhängig sind (freigeschaltet = grün, noch nicht freigeschaltet = rot). © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 18/39 Wir speichern zuerst eine neue dynamische Seite unter dem Namen gb_admin.php ab. Als Überschrift verwenden wir Administration Gästebuch (Format h1). Dann fügen wir eine vierzeilige, dreispaltige Tabelle ein, um dem Layout einen Rahmen zu geben (siehe Layout unten). Datensatzgruppe erstellen Wir erstellen eine neue Datensatzgruppe (rs_admin): Diese Datensatzgruppe unterscheidet sich von der vorherigen dadurch, dass wir keinen Filter setzen (hier wollen wir ja alle Datensätze zeigen). Testen Sie ruhig diese Datensatzgruppe durch Klick auf die Schaltfläche Testen, sie müssten nun alle vorhandenen Datensätze sehen. Wiederholten Bereich einfügen Über die gesamte Tabelle (mit einem Return Abstand) fügen wir einen wiederholten Bereich ein. Das haben wir schon einmal gemacht, aber hier wollen wir alle Datensätze (sortiert vom Letzten zum Ersten) anzeigen. Darstellung Seite gb_admin.php (im Entwurf): © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 19/39 Formular zum Freischalten erstellen Wir wollen nun per Formular-Schaltfläche das Prüf-Feld der Datenbanktabelle gaestebuch aktualisieren (mit 1 = freigeschaltet). Um in der ersten Zelle der letzten Zeile ein Formular zu erstellen fügen wir zuerst den Formular-Tag ein. Siehe Symbol aus der FormulareSymbolleiste. In diesem Formular müsse wir noch die nowendigen Daten mitgeben, damit upgedatet werden kann. Die ID (welcher Datensatz soll upgedatet werden) und das zu aktualisierende Feld freigabe (soll den Wert 1 erhalten). Und dann benötigen wir noch die Schalfläche Freischalten , um diesen Vorgang auszulösen. ID übergeben Die ID übergeben wir mit einem versteckten Feld (Name: hf_frei_ID_freischalten). Die jeweilige ID übernehmen wir dynamisch aus der Datensatzgruppe. Auch dies geht ganz einfach, indem wir auf das Symbol im Eigenschaftsfenster des versteckten Feldes klicken. Es öffnet sich nun folgender Dialog, wo wir die ID auswählen: So sieht die Lösung aus: Pruef mit Wert 1 übergeben Wir fügen in das Formular ein neues versteckes Feld ein (Name: hf_frei_freigabe). Den Wert 1 tragen wir direkt ein. Lösung: Schaltfläche Freischalten einfügen Aus der Symbolleiste Formulare fügen Sie eine Schaltfläche ein(Beschriftung: Freischalten). Ergebnis: Damit wären alle Formularelemente vorhanden, um den jeweiligen Datensatz aktualisieren zu können. Wenn nun diese Voraussetzung erfüllt sind, können wir das notwendige Serververhalten (Datensatz aktualisieren) einfügen. © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 20/39 Datensatz aktualisieren Der Cursor befindet sich im nun erstellten Formular (haben wir nicht unbenannt). Sie wählen nun aus der Symbolleiste Anwendungen das Symbol Datensatz aktualisieren aus. Beachten Sie im folgenden Dialog vor allem folgende Eingaben bzw. Änderungen: ID weisen wir den Wert unseres versteckten Feldes hf_ID_frei zu. freigabe weisen wir den Wert des versteckten Feldes hf_frei_freigabe zu. Nach dem Aktualisieren soll zur selben Datei gb_admin.php gesprungen werden. Layout siehe unten Nun können Sie das "Freischalten" testen! Damit wir das Freischalten auch leicht rückgängig machen können ("Sperren") ist ein weiteres Formular (form2) notwendig. Formular zum Sperren erstellen Der Vorgang gleicht dem Erstellen des Formulars zum Freischalten, mit folgenden Unterschieden: ID weisen wir den Wert unseres versteckten Feldes hf _sperr_ID zu. freigabe weisen wir den Wert (jetzt freigabe = 0)des versteckten Feldes hf_sperr_freigabe zu. Nach dem Aktualisieren soll auch wieder zur Datei gb_admin.php gesprungen werden. Layout siehe oben. © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 21/39 Formular zum Löschen erstellen Man könnte auch einen Link erstellen und die ID mit der GET-Methode (per URLParameter) übergeben. Weil es hier vom Layout her besser passt und auch einfacher ist werden wir dies per Formular (form3) erledigen. Darüber hinaus benötigen wir noch eine Datei, ähnlich der Sie fügen wiederum den Formular-Tag ein und dann einverstecktes Feld (Name: hf_ID_loesch) mit dynamischen Wert der ID (aus rs_admin). Datensatz löschen Sie wählen nun aus der Symbolleiste Anwendungen das Symbol Datensatz löschen aus. Es erscheint nun folgender Dialog, den Sie entsprechend ausfüllen: Der Primärschlüsselwert, die ID, ist in der Formularvariablen hf_ID_loesch vorhanden! Unsere fertige Gästebuch-Admin-Seite (im Entwurf): © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 22/39 Zugriffsschutz für Administrationsseiten einfügen Erst wenn die Website ausreichend getestet wurde fügen Sie den Zugriffsschutz ein. Für die Benutzerauthentifizierung entsprechenden Symbole finden Sie in der Symbolleiste Daten: Hier wird eine Session (davon später mehr) gestartet, die bis zum Schließen des Browsers bzw. bis zum Abmelden erhalten bleibt. Legen Sie zuerst in phpmyadmin die Tabelle nutzer an und geben Sie mindestens einen Datensatz ein: Tabelle: nutzer ID Feldname Feldtype tinyint(3) Feldlänge Zusätze 3 not_null primary_key unsigned auto_increment benutzername varchar(255) 30 not_null passwort varchar(255) 30 not_null Datei: gb_login.php Sie erstellen eine neue Seite, in der Sie eine Tabelle (siehe Abb.) einfügen. Sie können auch mit dem Einfüge-Assistenten (Assistent: „Einfügeformular für Datensätze“) arbeiten, Beachten Sie die Übereinstimmung der Länge der Textfelder mit der Länge der Datenbankfelder (hier 20)! Abb.: Benutzeranmeldung (gb_login.php) © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 23/39 Serververhalten "Benutzer anmelden" hinzufügen In die Seite gb_login.php fügen Sie dieses Serververhalten ein: Abb.: Dialog Benutzer anmelden (gb_login.php) Datei: gb_admin.php In der Datei gb_admin.php fügen Sie das Serververhalten „Zugriff auf Seite beschränken“ ein. Dieses Serververhalten wird für alle Seiten eingefügt, für die der Zugriffsschutz gelten soll. Darüber hinaus bieten Sie noch die Möglichkeit zu Abmelden (Beendigung der Session). Serververhalten "Zugriff auf Seite beschränken" einfügen Dieses Serververhalten fügen Sie in die gb_admin.php ein: Abb.: Dialog "Zugriff auf Seite beschränken" © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 24/39 Serververhalten "Benutzer abmelden" Dieses Serververhalten fügen Sie auch in die gb_admin.php ein. Nachdem sich der Administrator abgemeldet hat, soll zur "normalen" Anzeige gesprungen werden. Abb.: Dialog Benutzer abmelden Abb.: Verwaltungsseite (gb_admin.php ) mit Link Abmelden Zum Abschluß sichern Sie die Datenbank (sql-Datei) und testen Sie die Anwendung. © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 25/39 Anhang: Quellcode Datensicherung: gaestebuch2012.sql --------- phpMyAdmin SQL Dump version 3.5.2 http://www.phpmyadmin.net Host: localhost Erstellungszeit: 03. Nov 2012 um 21:26 Server Version: 5.5.25a PHP-Version: 5.4.4 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 /*!40101 /*!40101 /*!40101 SET SET SET SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; NAMES utf8 */; --- Datenbank: `gaestebuch2012` --- ---------------------------------------------------------- Tabellenstruktur für Tabelle `gaestebuch` -CREATE TABLE IF NOT EXISTS `gaestebuch` ( `ID` smallint(5) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `email` varchar(255) NOT NULL, `betreff` varchar(255) NOT NULL, `meldung` text NOT NULL, `datum` date DEFAULT NULL, `freigabe` tinyint(3) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=17 ; --- Daten für Tabelle `gaestebuch` -INSERT INTO `gaestebuch` (`ID`, `name`, `email`, `betreff`, `meldung`, `datum`, `freigabe`) VALUES (6, 'Valentin!', '[email protected]', 'Hi!', 'Wann treffen wir uns?', '2012-09-24', 1), (7, 'Julius', '[email protected]', 'Ich bin da!', 'Liebe Freunde! Ich bin wieder in Wien!', '2012-09-24', 1), (9, 'Walter', '[email protected]', 'Treffen in Wien', 'Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von … … Aber wer hat irgend ein Recht, einen Menschen zu tadeln, der die Entscheidung trifft, eine Freude zu genießen, die keine unangenehmen Folgen hat, oder einen, der Schmerz vermeidet, welcher keine daraus resultierende Freude nach sich zieht?Alles klar! Ich werde ganz schnell schreiben! Eurer ', '2012-10-08', 1), (10, 'Armin Harry', '[email protected]', 'Hinweis', 'Alles klar! Ich werde ganz schnell schreiben! Euer Armin', '2012-10-08', 1), (11, 'Susanne', '[email protected]', 'Lustig!', 'Hier steht der lustige Text...', '2012-10-08', 1), (12, 'hihi', 'hihi', 'hihi', 'hihi', '2012-10-08', 0), (13, 'hihi', '[email protected]', 'hihi', 'hihi', '2012-10-08', 0), (15, 'Zorro', '[email protected]', 'Lob!', 'Wunderbares Gästebuch!', '2012-11-03', 1), © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 26/39 (16, 'Hermann', '[email protected]', 'Bemerkung', 'Die neue Webseite ist zum Fürchten', '2012-11-03', 1); -- ---------------------------------------------------------- Tabellenstruktur für Tabelle `nutzer` -CREATE TABLE IF NOT EXISTS `nutzer` ( `ID` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `benutzername` varchar(255) NOT NULL, `passwort` varchar(255) NOT NULL, PRIMARY KEY (`ID`), KEY `ID` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; --- Daten für Tabelle `nutzer` -INSERT INTO `nutzer` (`ID`, `benutzername`, `passwort`) VALUES (1, 'mayer', '12345'); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 27/39 Datenbank: gaestebuch2012 Die Datenbank gaestebuch2012 enthält 2 Tabellen: Tabelle: gaestebuch Feldname Feldtype Feldlänge Zusätze ID int 5 not_null primary_key unsigned auto_increment name string 20 not_null email string 255 not_null betreff string 255 not_null meldung blob 65535 not_null blob datum date 10 binary freigabe int 3 not_null unsigned Die Tabelle gaestebuch enthält 9 Datensätze: ID name email betreff meldung datum freigabe 6 Valentin! [email protected] Hi! Wann treffen wir uns? 2012-091 24 7 Julius [email protected] Ich bin da! Liebe Freunde! Ich bin wieder in Wien! 2012-091 24 10 Armin Harry [email protected] Hinweis Alles klar! Ich werde ganz schnell schreiben! Euer Armin 2012-101 08 11 Susanne [email protected] Lustig! Hier steht der lustige Text... 2012-101 08 12 hihi hihi hihi hihi 2012-100 08 13 hihi [email protected] hihi hihi 2012-100 08 15 Zorro [email protected] Lob! Wunderbares Gästebuch! 2012-111 03 16 Hermann [email protected] Bemerkung Die neue Webseite ist zum Fürchten 2012-111 03 Tabelle: nutzer Feldname ID Feldtype Feldlänge int Zusätze 3 not_null primary_key multiple_key unsigned auto_increment benutzername string 255 not_null passwort 255 not_null string Die Tabelle nutzer enthält 1 Datensatz: ID benutzername passwort 1 mayer © Mag. Erwin Mayer 12345 Beispiel: Moderiertes Gästebuch Seite 28/39 Dateiliste: gaestebuch.css gb_admin.php gb_anzeige.php gb_eingabe.php gb_funktionen.inc.php gb_login.php gb_verweigert.php Datei: gaestebuch.css [01] [02] [03] [04] [05] [06] [07] [08] [09] [10] [11] [12] [13] [14] [15] [16] body { font-family: Arial, Helvetica, sans-serif; background: #FF8080; } .gesperrt { background: #FF0000; } .freigegeben { background: #80FF00; } table { background: #FFFFF2; } td { background: #FFFF00; } Datei: gb_admin.php [01] [02] [03] [04] [05] [06] [07] [08] [09] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] <?php require_once('Connections/vb_gb.php'); ?> <?php ?> <?php //initialize the session session_start(); // ** Logout the current user. ** $logoutAction = $_SERVER['PHP_SELF']."?doLogout=true"; if ((isset($_SERVER['QUERY_STRING'])) && ($_SERVER['QUERY_STRING'] != "")){ $logoutAction .="&". htmlentities($_SERVER['QUERY_STRING']); } if ((isset($_GET['doLogout'])) &&($_GET['doLogout']=="true")){ //to fully log out a visitor we need to clear the session varialbles #session_unregister('MM_Username'); #session_unregister('MM_UserGroup'); # korrigiert em--------------------------------------------------------session_destroy(); $logoutGoTo = "gb_anzeige.php"; if ($logoutGoTo) { header("Location: $logoutGoTo"); exit; } } ?> <?php $MM_authorizedUsers = ""; $MM_donotCheckaccess = "true"; // *** Restrict Access To Page: Grant or deny access to this page function isAuthorized($strUsers, $strGroups, $UserName, $UserGroup) { // For security, start by assuming the visitor is NOT authorized. $isValid = False; © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 29/39 [36] // When a visitor has logged into this site, the Session variable MM_Username set equal to their username. [37] // Therefore, we know that a user is NOT logged in if that Session variable is blank. [38] if (!empty($UserName)) { [39] // Besides being logged in, you may restrict access to only certain users based on an ID established when they login. [40] // Parse the strings into arrays. [41] $arrUsers = Explode(",", $strUsers); [42] $arrGroups = Explode(",", $strGroups); [43] if (in_array($UserName, $arrUsers)) { [44] $isValid = true; [45] } [46] // Or, you may restrict access to only certain users based on their username. [47] if (in_array($UserGroup, $arrGroups)) { [48] $isValid = true; [49] } [50] if (($strUsers == "") && true) { [51] $isValid = true; [52] } [53] } [54] return $isValid; [55] } [56] [57] $MM_restrictGoTo = "gb_verweigert.php"; [58] if (!((isset($_SESSION['MM_Username'])) && (isAuthorized("",$MM_authorizedUsers, $_SESSION['MM_Username'], $_SESSION['MM_UserGroup'])))) { [59] $MM_qsChar = "?"; [60] $MM_referrer = $_SERVER['PHP_SELF']; [61] if (strpos($MM_restrictGoTo, "?")) $MM_qsChar = "&"; [62] if (isset($QUERY_STRING) && strlen($QUERY_STRING) > 0) [63] $MM_referrer .= "?" . $QUERY_STRING; [64] $MM_restrictGoTo = $MM_restrictGoTo. $MM_qsChar . "accesscheck=" . urlencode($MM_referrer); [65] header("Location: ". $MM_restrictGoTo); [66] exit; [67] } [68] ?> [69] <?php include("gb_funktionen.inc.php"); ?> [70] <?php [71] function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") [72] { [73] $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; [74] [75] switch ($theType) { [76] case "text": [77] $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; [78] break; [79] case "long": [80] case "int": [81] $theValue = ($theValue != "") ? intval($theValue) : "NULL"; [82] break; [83] case "double": [84] $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; [85] break; [86] case "date": [87] $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; [88] break; [89] case "defined": [90] $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; [91] break; [92] } [93] return $theValue; [94] } [95] [96] $editFormAction = $_SERVER['PHP_SELF']; [97] if (isset($_SERVER['QUERY_STRING'])) { [98] $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); [99] } © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 30/39 [100] [101] if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form1")) { [102] $updateSQL = sprintf("UPDATE gaestebuch SET freigabe=%s WHERE ID=%s", [103] GetSQLValueString($_POST['hf_frei_freigabe'], "int"), [104] GetSQLValueString($_POST['hf_ID_frei'], "int")); [105] [106] mysql_select_db($database_vb_gb, $vb_gb); [107] $Result1 = mysql_query($updateSQL, $vb_gb) or die(mysql_error()); [108] [109] $updateGoTo = "gb_admin.php"; [110] if (isset($_SERVER['QUERY_STRING'])) { [111] $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; [112] $updateGoTo .= $_SERVER['QUERY_STRING']; [113] } [114] header(sprintf("Location: %s", $updateGoTo)); [115] } [116] [117] if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form2")) { [118] $updateSQL = sprintf("UPDATE gaestebuch SET freigabe=%s WHERE ID=%s", [119] GetSQLValueString($_POST['hf_sperr_freigabe'], "int"), [120] GetSQLValueString($_POST['hf_sperr_ID'], "int")); [121] [122] mysql_select_db($database_vb_gb, $vb_gb); [123] $Result1 = mysql_query($updateSQL, $vb_gb) or die(mysql_error()); [124] [125] $updateGoTo = "gb_admin.php"; [126] if (isset($_SERVER['QUERY_STRING'])) { [127] $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; [128] $updateGoTo .= $_SERVER['QUERY_STRING']; [129] } [130] header(sprintf("Location: %s", $updateGoTo)); [131] } [132] [133] if ((isset($_POST['ID'])) && ($_POST['ID'] != "")) { [134] $deleteSQL = sprintf("DELETE FROM gaestebuch WHERE ID=%s", [135] GetSQLValueString($_POST['ID'], "int")); [136] [137] mysql_select_db($database_vb_gb, $vb_gb); [138] $Result1 = mysql_query($deleteSQL, $vb_gb) or die(mysql_error()); [139] [140] $deleteGoTo = "gb_admin.php"; [141] if (isset($_SERVER['QUERY_STRING'])) { [142] $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?"; [143] $deleteGoTo .= $_SERVER['QUERY_STRING']; [144] } [145] header(sprintf("Location: %s", $deleteGoTo)); [146] } [147] [148] mysql_select_db($database_vb_gb, $vb_gb); [149] $query_rs_admin = "SELECT * FROM gaestebuch ORDER BY ID DESC"; [150] $rs_admin = mysql_query($query_rs_admin, $vb_gb) or die(mysql_error()); [151] $row_rs_admin = mysql_fetch_assoc($rs_admin); [152] $totalRows_rs_admin = mysql_num_rows($rs_admin); [153] ?> [154] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> [155] <html> [156] <head> [157] <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> [158] <title>Administration Gästebuch</title> [159] <link href="gaestebuch.css" rel="stylesheet" type="text/css"> [160] </head> [161] [162] <body> [163] <h1>Administration G&auml;stebuch</h1> [164] <p>&nbsp;<a href="<?php echo $logoutAction ?>">Abmelden</a></p> [165] <?php do { ?> [166] <div id="datensatz"> [167] <table width="80%" border="0" cellpadding="2" class="<?php echo gesperrt($row_rs_admin['freigabe']); ?>"> [168] <tr> [169] <td><?php echo $row_rs_admin['name']; ?></td> © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 31/39 [170] <td><?php echo $row_rs_admin['email']; ?></td> [171] <td><?php echo dtdatum($row_rs_admin['datum']); ?></td> [172] <td><?php echo gesperrt($row_rs_admin['freigabe']); ?></td> [173] </tr> [174] <tr> [175] <td colspan="4"><?php echo $row_rs_admin['betreff']; ?></td> [176] </tr> [177] <tr> [178] <td colspan="4"><?php echo $row_rs_admin['meldung']; ?></td> [179] </tr> [180] <tr> [181] <td><form name="form1" method="POST" action="<?php echo $editFormAction; ?>"> [182] <input name="hf_ID_frei" type="hidden" id="hf_ID_frei" value="<?php echo $row_rs_admin['ID']; ?>"> [183] <input name="hf_frei_freigabe" type="hidden" id="hf_frei_freigabe" value="1"> [184] <input type="submit" name="Submit" value="freischalten"> [185] <input type="hidden" name="MM_update" value="form1"> [186] </form></td> [187] <td><form name="form2" method="POST" action="<?php echo $editFormAction; ?>"> [188] <input name="hf_sperr_ID" type="hidden" id="hf_sperr_ID" value="<?php echo $row_rs_admin['ID']; ?>"> [189] <input name="hf_sperr_freigabe" type="hidden" id="hf_sperr_freigabe" value="0"> [190] <input type="submit" name="Submit2" value="sperren"> [191] <input type="hidden" name="MM_update" value="form2"> [192] </form></td> [193] <td><form name="form3" method="post" action=""> [194] <input name="hf_ID_loesch" type="hidden" id="hf_ID_loesch" value="<?php echo $row_rs_admin['ID']; ?>"> [195] <input type="submit" name="Submit3" value="Löschen"> [196] </form></td> [197] <td>&nbsp;</td> [198] </tr> [199] </table> [200] <p>&nbsp;</p> [201] </div> [202] <?php } while ($row_rs_admin = mysql_fetch_assoc($rs_admin)); ?> [203] <p>&nbsp;</p> [204] </body> [205] </html> [206] <?php [207] mysql_free_result($rs_admin); [208] ?> Datei: gb_anzeige.php [01] <?php require_once('Connections/vb_gb.php'); ?> [02] <?php [03] $currentPage = $_SERVER["PHP_SELF"]; [04] [05] $maxRows_rs_ausgabe = 3; [06] $pageNum_rs_ausgabe = 0; [07] if (isset($_GET['pageNum_rs_ausgabe'])) { [08] $pageNum_rs_ausgabe = $_GET['pageNum_rs_ausgabe']; [09] } [10] $startRow_rs_ausgabe = $pageNum_rs_ausgabe * $maxRows_rs_ausgabe; [11] [12] mysql_select_db($database_vb_gb, $vb_gb); [13] $query_rs_ausgabe = "SELECT * FROM gaestebuch WHERE freigabe = 1 ORDER BY ID DESC"; [14] $query_limit_rs_ausgabe = sprintf("%s LIMIT %d, %d", $query_rs_ausgabe, $startRow_rs_ausgabe, $maxRows_rs_ausgabe); [15] $rs_ausgabe = mysql_query($query_limit_rs_ausgabe, $vb_gb) or die(mysql_error()); [16] $row_rs_ausgabe = mysql_fetch_assoc($rs_ausgabe); [17] [18] if (isset($_GET['totalRows_rs_ausgabe'])) { [19] $totalRows_rs_ausgabe = $_GET['totalRows_rs_ausgabe']; [20] } else { [21] $all_rs_ausgabe = mysql_query($query_rs_ausgabe); © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 32/39 [22] $totalRows_rs_ausgabe = mysql_num_rows($all_rs_ausgabe); [23] } [24] $totalPages_rs_ausgabe = ceil($totalRows_rs_ausgabe/$maxRows_rs_ausgabe)-1; [25] [26] $queryString_rs_ausgabe = ""; [27] if (!empty($_SERVER['QUERY_STRING'])) { [28] $params = explode("&", $_SERVER['QUERY_STRING']); [29] $newParams = array(); [30] foreach ($params as $param) { [31] if (stristr($param, "pageNum_rs_ausgabe") == false && [32] stristr($param, "totalRows_rs_ausgabe") == false) { [33] array_push($newParams, $param); [34] } [35] } [36] if (count($newParams) != 0) { [37] $queryString_rs_ausgabe = "&" . htmlentities(implode("&", $newParams)); [38] } [39] } [40] $queryString_rs_ausgabe = sprintf("&totalRows_rs_ausgabe=%d%s", $totalRows_rs_ausgabe, $queryString_rs_ausgabe); [41] ?> [42] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> [43] <html> [44] <head> [45] <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> [46] <title>Gästebuch Anzeige</title> [47] <link href="gaestebuch.css" rel="stylesheet" type="text/css"> [48] </head> [49] [50] <body> [51] <h1>Unser G&auml;stebuch</h1> [52] <p><a href="gb_eingabe.php">Eingeben</a></p> [53] <?php do { ?> [54] <table width="80%" border="0" cellpadding="2"> [55] <tr> [56] <td><?php echo $row_rs_ausgabe['name']; ?></td> [57] <td><?php echo $row_rs_ausgabe['email']; ?></td> [58] <td><?php echo $row_rs_ausgabe['datum']; ?></td> [59] </tr> [60] <tr> [61] <td colspan="3"><strong><?php echo $row_rs_ausgabe['betreff']; ?></strong></td> [62] </tr> [63] <tr> [64] <td colspan="3"><?php echo $row_rs_ausgabe['meldung']; ?></td> [65] </tr> [66] </table> [67] <p>&nbsp;</p> [68] <?php } while ($row_rs_ausgabe = mysql_fetch_assoc($rs_ausgabe)); ?> [69] <p> [70] <table border="0" align="center"> [71] <tr> [72] <td align="center"><?php if ($pageNum_rs_ausgabe > 0) { // Show if not first page ?> [73] <a href="<?php printf("%s?pageNum_rs_ausgabe=%d%s", $currentPage, 0, $queryString_rs_ausgabe); ?>"><img src="First.gif" border=0></a> [74] <?php } // Show if not first page ?> [75] </td> [76] <td align="center"><?php if ($pageNum_rs_ausgabe > 0) { // Show if not first page ?> [77] <a href="<?php printf("%s?pageNum_rs_ausgabe=%d%s", $currentPage, max(0, $pageNum_rs_ausgabe - 1), $queryString_rs_ausgabe); ?>"><img src="Previous.gif" border=0></a> [78] <?php } // Show if not first page ?> [79] </td> [80] <td align="center"><?php if ($pageNum_rs_ausgabe < $totalPages_rs_ausgabe) { // Show if not last page ?> [81] <a href="<?php printf("%s?pageNum_rs_ausgabe=%d%s", $currentPage, min($totalPages_rs_ausgabe, $pageNum_rs_ausgabe + 1), $queryString_rs_ausgabe); ?>"><img src="Next.gif" border=0></a> [82] <?php } // Show if not last page ?> [83] </td> © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 33/39 [84] <td align="center"><?php if ($pageNum_rs_ausgabe < $totalPages_rs_ausgabe) { // Show if not last page ?> [85] <a href="<?php printf("%s?pageNum_rs_ausgabe=%d%s", $currentPage, $totalPages_rs_ausgabe, $queryString_rs_ausgabe); ?>"><img src="Last.gif" border=0></a> [86] <?php } // Show if not last page ?> [87] </td> [88] </tr> [89] </table> [90] </p> [91] <p>Datens&auml;tze <?php echo ($startRow_rs_ausgabe + 1) ?>&nbsp;bis&nbsp;<?php echo min($startRow_rs_ausgabe + $maxRows_rs_ausgabe, $totalRows_rs_ausgabe) ?>&nbsp;von&nbsp; <?php echo $totalRows_rs_ausgabe ?> [92] <p>&nbsp;</p> [93] </body> [94] </html> [95] <?php [96] mysql_free_result($rs_ausgabe); [97] ?> Datei: gb_eingabe.php [01] <?php require_once('Connections/vb_gb.php'); ?> [02] <?php [03] function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") [04] { [05] $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue; [06] [07] switch ($theType) { [08] case "text": [09] $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; [10] break; [11] case "long": [12] case "int": [13] $theValue = ($theValue != "") ? intval($theValue) : "NULL"; [14] break; [15] case "double": [16] $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; [17] break; [18] case "date": [19] $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; [20] break; [21] case "defined": [22] $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; [23] break; [24] } [25] return $theValue; [26] } [27] [28] $editFormAction = $_SERVER['PHP_SELF']; [29] if (isset($_SERVER['QUERY_STRING'])) { [30] $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); [31] } [32] [33] if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) { [34] $insertSQL = sprintf("INSERT INTO gaestebuch (name, email, betreff, meldung, datum, freigabe) VALUES (%s, %s, %s, %s, %s, %s)", [35] GetSQLValueString($_POST['name'], "text"), [36] GetSQLValueString($_POST['email'], "text"), [37] GetSQLValueString($_POST['betreff'], "text"), [38] GetSQLValueString($_POST['meldung'], "text"), [39] GetSQLValueString($_POST['hf_datum'], "date"), [40] GetSQLValueString($_POST['hf_freigabe'], "int")); [41] [42] mysql_select_db($database_vb_gb, $vb_gb); [43] $Result1 = mysql_query($insertSQL, $vb_gb) or die(mysql_error()); [44] [45] $insertGoTo = "gb_anzeige.php"; [46] if (isset($_SERVER['QUERY_STRING'])) { [47] $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?"; [48] $insertGoTo .= $_SERVER['QUERY_STRING']; © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 34/39 [49] } [50] header(sprintf("Location: %s", $insertGoTo)); [51] } [52] [53] mysql_select_db($database_vb_gb, $vb_gb); [54] $query_rs_eingabe = "SELECT * FROM gaestebuch"; [55] $rs_eingabe = mysql_query($query_rs_eingabe, $vb_gb) or die(mysql_error()); [56] $row_rs_eingabe = mysql_fetch_assoc($rs_eingabe); [57] $totalRows_rs_eingabe = mysql_num_rows($rs_eingabe); [58] ?> [59] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> [60] <html> [61] <head> [62] <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> [63] <title>Gästebuch Eingabe</title> [64] <link href="gaestebuch.css" rel="stylesheet" type="text/css"> [65] <script language="JavaScript" type="text/JavaScript"> [66] <!-[67] function MM_findObj(n, d) { //v4.01 [68] var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) { [69] d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);} [70] if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n]; [71] for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); [72] if(!x && d.getElementById) x=d.getElementById(n); return x; [73] } [74] [75] function YY_checkform() { //v4.65 [76] //copyright (c)1998,2002 Yaromat.com [77] var args = YY_checkform.arguments; var myDot=true; var myV=''; var myErr='';var addErr=false;var myReq; [78] for (var i=1; i<args.length;i=i+4){ [79] if (args[i+1].charAt(0)=='#'){myReq=true; args[i+1]=args[i+1].substring(1);}else{myReq=false} [80] var myObj = MM_findObj(args[i].replace(/\[\d+\]/ig,"")); [81] myV=myObj.value; [82] if (myObj.type=='text'||myObj.type=='password'||myObj.type=='hidden'){ [83] if (myReq&&myObj.value.length==0){addErr=true} [84] if ((myV.length>0)&&(args[i+2]==1)){ //fromto [85] var myMa=args[i+1].split('_');if(isNaN(parseInt(myV))||myV<myMa[0]/1||myV > myMa[1]/1){addErr=true} [86] } else if ((myV.length>0)&&(args[i+2]==2)){ [87] var rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[az]{2,4}$");if(!rx.test(myV))addErr=true; [88] } else if ((myV.length>0)&&(args[i+2]==3)){ // date [89] var myMa=args[i+1].split("#"); var myAt=myV.match(myMa[0]); [90] if(myAt){ [91] var myD=(myAt[myMa[1]])?myAt[myMa[1]]:1; var myM=myAt[myMa[2]]-1; var myY=myAt[myMa[3]]; [92] var myDate=new Date(myY,myM,myD); [93] if(myDate.getFullYear()!=myY||myDate.getDate()!=myD||myDate.getMonth()!=myM){addErr =true}; [94] }else{addErr=true} [95] } else if ((myV.length>0)&&(args[i+2]==4)){ // time [96] var myMa=args[i+1].split("#"); var myAt=myV.match(myMa[0]);if(!myAt){addErr=true} [97] } else if (myV.length>0&&args[i+2]==5){ // check this 2 [98] var myObj1 = MM_findObj(args[i+1].replace(/\[\d+\]/ig,"")); [99] if(myObj1.length)myObj1=myObj1[args[i+1].replace(/(.*\[)|(\].*)/ig,"")]; [100] if(!myObj1.checked){addErr=true} [101] } else if (myV.length>0&&args[i+2]==6){ // the same [102] var myObj1 = MM_findObj(args[i+1]); [103] if(myV!=myObj1.value){addErr=true} [104] } [105] } else [106] if (!myObj.type&&myObj.length>0&&myObj[0].type=='radio'){ [107] var myTest = args[i].match(/(.*)\[(\d+)\].*/i); © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 35/39 [108] var myObj1=(myObj.length>1)?myObj[myTest[2]]:myObj; [109] if (args[i+2]==1&&myObj1&&myObj1.checked&&MM_findObj(args[i+1]).value.length/1==0){add Err=true} [110] if (args[i+2]==2){ [111] var myDot=false; [112] for(var j=0;j<myObj.length;j++){myDot=myDot||myObj[j].checked} [113] if(!myDot){myErr+='* ' +args[i+3]+'\n'} [114] } [115] } else if (myObj.type=='checkbox'){ [116] if(args[i+2]==1&&myObj.checked==false){addErr=true} [117] if(args[i+2]==2&&myObj.checked&&MM_findObj(args[i+1]).value.length/1==0){addErr=tru e} [118] } else if (myObj.type=='select-one'||myObj.type=='select-multiple'){ [119] if(args[i+2]==1&&myObj.selectedIndex/1==0){addErr=true} [120] }else if (myObj.type=='textarea'){ [121] if(myV.length<args[i+1]){addErr=true} [122] } [123] if (addErr){myErr+='* '+args[i+3]+'\n'; addErr=false} [124] } [125] if (myErr!=''){alert('Die gewünschte Information ist unvollständig oder enthält Fehler:\t\t\t\t\t\n\n'+myErr)} [126] document.MM_returnValue = (myErr==''); [127] } [128] //--> [129] </script> [130] </head> [131] [132] <body> [133] <h1>Unser G&auml;stebuch</h1> [134] <p><a href="gb_anzeige.php">Anzeigen</a></p> [135] <h3>Eingabeformular</h3> [136] <p>&nbsp; </p> [137] [138] <form action="<?php echo $editFormAction; ?>" method="post" name="form1" onSubmit="YY_checkform('form1','name','#q','0','Name muß vorhanden sein.','email','#S','2','Ist keine E-Mail-Adresse','betreff','#q','0','Betreff muß eingegeben werden');return document.MM_returnValue"> [139] <table align="center"> [140] <tr valign="baseline"> [141] <td nowrap align="right">Name:</td> [142] <td><input type="text" name="name" value="" size="32"></td> [143] </tr> [144] <tr valign="baseline"> [145] <td nowrap align="right">Email:</td> [146] <td><input type="text" name="email" value="" size="32"></td> [147] </tr> [148] <tr valign="baseline"> [149] <td nowrap align="right">Betreff:</td> [150] <td><input type="text" name="betreff" value="" size="32"></td> [151] </tr> [152] <tr valign="baseline"> [153] <td nowrap align="right" valign="top">Meldung: [154] </td> [155] <td><textarea name="meldung" cols="32" rows="3"></textarea></td> [156] </tr> [157] <tr valign="baseline"> [158] <td nowrap align="right"><input name="hf_freigabe" type="hidden" id="hf_freigabe" value="0"> [159] <input name="hf_datum" type="hidden" id="hf_datum" value="<?php echo date('Y.m.d'); ?>"></td> [160] <td><input type="submit" value="Datensatz einfügen"></td> [161] </tr> [162] </table> [163] <input type="hidden" name="MM_insert" value="form1"> [164] </form> [165] <p>&nbsp;</p> [166] </body> [167] </html> [168] <?php [169] mysql_free_result($rs_eingabe); [170] ?> © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 36/39 Datei: gb_funktionen.inc.php [01] <?php [02] function gesperrt($freigabe) [03] { [04] # Funktion zur Steuerung der Ausgabe des Kennzeichens "freigabe" der Datenbank-Tabelle gaestebuch [05] if ($freigabe == 0) [06] { [07] return "gesperrt"; [08] } [09] if ($freigabe == 1) [10] { [11] return "freigegeben"; [12] } [13] } [14] [15] function dtdatum($datum) [16] { [17] # gibt das Datenbankdatum auf Deutsch in Langform aus [18] # Ausgangsdatum Datum der DB im Format JJJJ-MM-TT z. B 2012-10-15 [19] # Zieldatum: Sa, 15. Oktober 2012 [20] setlocale(LC_ALL,"german"); [21] $jahr = substr($datum,0,4); [22] $monat = substr($datum,5,2); [23] $tag = substr($datum,8,2); [24] return strftime("%a, %d. %b %Y",mktime(0,0,0,$monat,$tag,$jahr)); [25] [26] } [27] [28] ?> Datei: gb_login.php [01] <?php [02] session_start(); [03] ?> [04] <?php require_once('Connections/vb_gb.php'); ?> [05] <?php [06] mysql_select_db($database_vb_gb, $vb_gb); [07] $query_rs_zugang = "SELECT * FROM nutzer"; [08] $rs_zugang = mysql_query($query_rs_zugang, $vb_gb) or die(mysql_error()); [09] $row_rs_zugang = mysql_fetch_assoc($rs_zugang); [10] $totalRows_rs_zugang = mysql_num_rows($rs_zugang); [11] ?> [12] <?php [13] // *** Validate request to login to this site. [14] #session_start(); [15] [16] $loginFormAction = $_SERVER['PHP_SELF']; [17] if (isset($accesscheck)) { [18] $GLOBALS['PrevUrl'] = $accesscheck; [19] session_register('PrevUrl'); [20] } [21] [22] if (isset($_POST['benutzername'])) { [23] $loginUsername=$_POST['benutzername']; [24] $password=$_POST['passwort']; [25] $MM_fldUserAuthorization = ""; [26] $MM_redirectLoginSuccess = "gb_admin.php"; [27] $MM_redirectLoginFailed = "gb_verweigert.php"; [28] $MM_redirecttoReferrer = false; [29] mysql_select_db($database_vb_gb, $vb_gb); [30] [31] $LoginRS__query=sprintf("SELECT benutzername, passwort FROM nutzer WHERE benutzername='%s' AND passwort='%s'", [32] get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password)); [33] [34] $LoginRS = mysql_query($LoginRS__query, $vb_gb) or die(mysql_error()); [35] $loginFoundUser = mysql_num_rows($LoginRS); [36] if ($loginFoundUser) { [37] $loginStrGroup = ""; © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 37/39 [38] [39] //declare two session variables and assign them [40] # korrigiert em [41] $_SESSION['MM_Username'] = $loginUsername; [42] $_SESSION['MM_UserGroup'] = $loginStrGroup; [43] [44] //register the session variables [45] # session_register('MM_Username'); [46] #session_register('MM_UserGroup'); [47] [48] if (isset($_SESSION['PrevUrl']) && false) { [49] $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; [50] } [51] header("Location: " . $MM_redirectLoginSuccess ); [52] } [53] else { [54] header("Location: ". $MM_redirectLoginFailed ); [55] } [56] } [57] ?> [58] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> [59] <html> [60] <head> [61] <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> [62] <title>Anmeldung Gästebuch</title> [63] <link href="gaestebuch.css" rel="stylesheet" type="text/css"> [64] </head> [65] [66] <body> [67] <h1>Anmeldung</h1> [68] <form name="form1" method="POST" action="<?php echo $loginFormAction; ?>"> [69] <table border="0" cellpadding="2"> [70] <tr> [71] <td scope="col">Benutzername</td> [72] <th scope="col"><input name="benutzername" type="text" id="benutzername"></th> [73] </tr> [74] <tr> [75] <td>Passwort</td> [76] <td><input name="passwort" type="password" id="passwort"></td> [77] </tr> [78] <tr> [79] <td>&nbsp;</td> [80] <td><input type="submit" name="Submit" value="Anmelden"></td> [81] </tr> [82] </table> [83] </form> [84] <p>&nbsp; </p> [85] </body> [86] </html> [87] <?php [88] mysql_free_result($rs_zugang); [89] ?> Datei: gb_verweigert.php [01] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> [02] <html> [03] <head> [04] <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> [05] <title>Zugriff verweigert</title> [06] <link href="gaestebuch.css" rel="stylesheet" type="text/css"> [07] </head> [08] [09] <body> [10] <h1>Zugriff verweigert</h1> [11] <p><a href="gb_login.php">Zur Anmeldung</a></p> [12] </body> [13] </html> ?php # FileName="Connection_php_mysql.htm" © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 38/39 Datei: connections/vb_gb.php # Type="MYSQL" # HTTP="true" define("local","TRUE"); #lokale Ausführung #define("local","FALSE"); #Ausführung am Webserver if (local) { $hostname_vb_gb = "localhost"; $database_vb_gb = "gaestebuch2012"; $username_vb_gb = "root"; $password_vb_gb = ""; } else { # Datenbank, Benutzername und Passwort des Webservers $hostname_vb_gb = "localhost"; $database_vb_gb = "gb2012"; $username_vb_gb = "xyxyxy"; $password_vb_gb = "geheim"; } $vb_gb = mysql_pconnect($hostname_vb_gb, $username_vb_gb, $password_vb_gb) or trigger_error(mysql_error(),E_USER_ERROR); ?> © Mag. Erwin Mayer Beispiel: Moderiertes Gästebuch Seite 39/39