Inhaltsverzeichnis - webwerft

Werbung
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
Inhaltsverzeichnis
MERKMALE ......................................................................................................................................................................... 2
STRUKTUR DER MYSQL-TABELLE............................................................................................................................... 3
VERWENDETE PHP-FUNKTIONEN................................................................................................................................ 3
FUNKTIONSWEISE - ÜBERSICHT .................................................................................................................................. 4
BASISMECHANISMEN DER DATENÜBERTRAGUNG .................................................................................................................. 4
FUNKTIONSWEISE - DETAILS ........................................................................................................................................ 4
VERBINDUNG ZUR DATENBANK HERSTELLEN........................................................................................................................ 4
BEITRAG HINZUFÜGEN ........................................................................................................................................................... 5
BEITRÄGE ANZEIGEN ............................................................................................................................................................. 5
SEITENSTEUERUNG / BLÄTTERFUNKTION .............................................................................................................................. 6
WEITERE ELEMENTE DES GÄSTEBUCHES................................................................................................................ 7
KONFIGURATIONSDATEI EINSTELLUNGEN.INC.PHP ................................................................................................................. 7
DATEI CREATE-TABLE.PHP..................................................................................................................................................... 8
DATEI ADMIN/INDEX.PHP ....................................................................................................................................................... 8
DATEI ACCESS.PHP ................................................................................................................................................................ 8
LISTING DES HAUPTSKRIPTES (INDEX.PHP)............................................................................................................. 9
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 1 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
Merkmale
•
Die Gästebuchseite enthält sowohl die Anzeige der bisherigen Gästebuchbeiträge mit Blätterfunktion ...
... als auch, am Seitenende, die Möglichkeit zum Erstellen und Absenden eines neuen Beitrages:
•
Die einzelnen Beiträge des Gästebuches werden in einer MySql-Datenbank gespeichert.
•
Pro HTML-Seite wird immer nur ein Ausschnitt aus der Gesamtheit der Beiträge angezeigt. Die Anzahl anzuzeigender
Seiten kann in einer Konfigurationsdatei festgelegt werden.
•
Alle anderen Beiträge können durch eine Blätterfunktion angesteuert werden. Wenn Anfang bzw. Ende der Beiträge
erreicht ist, werden in die betreffende Richtung keine Blätterlinks angezeigt.
•
Der PHP/HTML-Code der Gästebuchseite befindet sich in einem einzigen Skript (abgesehen von der
Konfigurationsdatei). Dieser Skript ruft sich sowohl beim Abschicken als auch beim Blättern selbst auf.
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 2 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
Struktur der MySQL-Tabelle
Feldname
Definition
ID (Index bzw. PrimaryKey der Tabelle)
int(10) NOT NULL auto_increment
name
varchar(100) DEFAULT '' NOT NULL
email
varchar(100) DEFAULT '' NOT NULL
beitrag
blob DEFAULT '' NOT NULL
datum
date DEFAULT '0000-00-00' NOT NULL
Primärschlüssel der Tabelle ist das Feld "ID", dessen Wert automatisch hochgezählt wird (auto_increment). Zur Aufnahme
größerer Textmengen ist das Feld "beitrag" vom Typ blob (max. 65535Byte).
Die Tabelle wird sowohl lokal als auch auf dem öffentlichen Server durch den Skript create-table.php erzeugt.
Verwendete PHP-Funktionen
Im Folgenden sind die verwendeten Funktionen aufgelistet. Die Zeilennummern beziehen sich auf das Listing des
Hauptskriptes index.php, beginnend auf Seite 9.
Funktion
Verwendung
Zeile / Seite
Kurzbeschreibung
include()
3/9
Mit diesem Befehl wird eine PHP- oder HTML-Datei so
eingeschlossen und ausgeführt, als wäre sie alleine aufgerufen
worden. Argument ist der Name der einzuschließenden Datei.
isset()
7/9
Überprüft Variablen auf deren Existenz.
Argument: Name der zu überprüfenden Variablen
Rückgabe: 1 bzw. true, wenn die betreffende Variable existiert bzw.
gesetzt wurde, ansonsten 0 bzw. false.
mysql_connect()
17 / 9
Öffnet eine Verbindung zum Datenbank-Server.
Argument1: Hostname
Argument2: Benutzername
Argument3: Passwort
Rückgabe: 0 bei Fehler, Verbindungs-ID bei Erfolg. Diese wird
später für Abfrage und Bearbeitung der Daten benötigt. Die
Verbindungs-ID wird auch als Handle oder Zeiger bezeichnet.
mysql_select_db()
19 / 9
Wählt auf dem angesprochenen Datenbank-Server (siehe
mysql_connect() ) eine Datenbank aus.
Argument1: Datenbankname
Argument2: Verbindungs-ID, siehe mysql_connect().
Argument 2 ist optional.
Rückgabe: 0 bei Fehler, Select-ID bei Erfolg.
die()
17,19 / 9
Beendet die Skriptausführung und gibt zuvor eine Meldung in das
Webbrowserfenster aus.
Argument: anzuzeigende Meldung
window.alert()
date()
29 / 9
JavaScript. Erzeugt ein Popup-Meldungsfenster
35 / 9
Liefert das aktuelle Datum. Argument ist eine Zeichenkette zur
Ausgabeformatierung.
mysql_query()
36,43 / 9
90 / 10
Sendet ein SQL-Statement an eine Datenbank.
Argument 1: SQL-Statement
Argument 2: Verbindungs-ID, siehe mysql_connect().
Argument 2 ist optional.
Rückgabe: 0 bei Fehler, ansonsten <>0. Wenn es sich beim SQLStatement um eine SQL-Select-Anweisung handelt, ist der
Rückgabewert ein Zeiger/Handle auf eine Ergebnisliste, der
beispielsweise für das Auslesen der selektierten Daten innerhalb
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 3 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
einer Schleife verwendet werden kann.
mysql_num_rows()
44 / 9
Liefert die Anzahl Datensätze infolge einer MySql-Select-Anweisung
(s mysql_query()). Argument ist der Zeiger/Handle auf die
Ergebnisliste.
mysql_fetch_array()
91 / 10
Überträgt den aktuellen Ergebnisdatensatz in ein Array.
Argument 1: Zeiger/Handle auf Ergebnisliste
Argument 2: Festlegung der Art des Arrays (indiziert, assoziativ oder
beides)
Argument 2 ist optional. Bei Nichtangabe sind beide Arrayarten
verfügbar.
Rückgabe: Ergebnisdatensatz als Array
htmlspecialchars()
92,93,96 / 10
Wandelt folgende HTML-spezifische Zeichen so um, dass sie im
Webbrowser nur angezeigt und nicht ausgeführt werden:
&, ", < und >
Argument: zu konvertierende Zeichenkette
Rückgabe: konvertierte Zeichenkette
nl2br()
97 / 10
Wandelt Text-Zeilenumbrüche in das HTML-Tag <br> um
Argument: zu konvertierende Zeichenkette
Rückgabe: konvertierte Zeichenkette
mysql_close()
197 / 12
Schließt eine bestehende Datenbankverbindung. Argument ist eine
Verbindungs-ID (s. mysql_connect())
Funktionsweise - Übersicht
Nach dem Öffnen der Gästebuchseite wird ein Ausschnitt der bisherigen Einträge in Form einer Ergebnistabelle angezeigt,
beginnend mit dem zuletzt eingefügten Beitrag. Mittels einer Blätterfunktion kann, sofern genügend Datensätze bzw.
Gästebucheinträge vorhanden sind, zu früheren bzw. späteren Beiträgen geblättert werden. Die Blätterlinks werden nicht
angezeigt, wenn sich vor bzw. nach dem aktuellen Ausschnitt keine Datensätze mehr befinden.
Die Erfassung neuer Gästebuchbeiträge wird mit einem Formular realisiert, welches sich unterhalb der Ergebnistabelle
befindet.
Basismechanismen der Datenübertragung
Zur Übertragung von Daten vom Webbrowser zum Webserver werden zwei von HTTP zur Verfügung gestellte
Mechanismen verwendet (HyperText-TransferProtocol - das grundlegende Protokoll des Internet):
Für die Blätterfunktion: Übertragung von Daten als Argumente innerhalb der Adresse, realisiert durch die entsprechende
Gestaltung der Blätterlinks.
Für die Erfassung neuer Gästebuchbeiträge: Übertragung von Daten im Körper der HTTP-Nachricht mittels eines
Formulars nach Betätigung des "Abschicken"-Buttons.
Funktionsweise - Details
Verbindung zur Datenbank herstellen
Voraussetzung für die korrekte Ausführung des Skriptes ist eine erfolgreiche Verbindung zur Datenbank. Diese wird mit den
Zeilen 16 bis 19 realisiert (s. Listing Seite 9).
Zeilen 17 und 19 können, allgemein formuliert, folgendermaßen geschrieben werden:
@funktion() or die($fehlermeldung)
Es handelt sich bei diesem Ausdruck um eine or - Verknüpfung, die üblicherweise von links beginnend ausgewertet wird.
Die Auswertung einer or - Verknüpfung wird abgebrochen, sobald erstmals ein true bzw. ein Wert <> 0 auftritt. Wenn
funktion()also einen Wert <> 0 zurückgibt, weil sie erfolgreich ausgeführt werden konnte, wird der Ausdruck hinter or
nicht mehr ausgewertet bzw. ausgeführt.
Das bedeutet im Umkehrschluss: die Funktion die($fehlermeldung) wird nur ausgeführt, wenn bei
mysql_connect() bzw. mysql_select_db() ein Fehler auftritt. Dann wird, bewirkt durch die Funktion
die($fehlermeldung), die betreffende Fehlermeldung angezeigt und die Skriptausführung sofort beendet.
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 4 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
Das Zeichen @ vor den beiden MySql-Funktionen bewirkt, dass im Fehlerfall nicht die betreffenden (englischen) StandardFehlermeldungen angezeigt werden.
Beitrag hinzufügen
Grundlegender Mechanismus beim Hinzufügen eines neuen Beitrages ist folgender:
Der untere Teil der Gästebuchseite enthält ein Formular (s. Listing Seite 11, Zeilen 138 bis 170), das Formular wiederum
enthält drei sichtbare Textfelder und eine Schaltfläche zum Absenden der Formulardaten. Die Formulardaten selbst sind die
Inhalte der Textfelder, von denen jedes durch einen eindeutigen Namen identifizierbar ist.
Von großer Bedeutung ist das einführende Formular-Tag in Zeile 138:
<form action=<? echo $PHP_SELF ?> method='post'>
Das action-Arrtribut legt fest, welche Aktion beim Betätigen der "Abschicken"-Schaltfläche ausgeführt wird. Bewirkt
durch die Variable $PHP_SELF innerhalb der PHP-Insel ruft sich das Skript selbst auf, um wie weiter unten beschrieben
einen neuen Datensatz in die MySql-Tabelle zu schreiben und die vorhandenen Datensätze (einschließlich des neuen)
anzuzeigen.
Durch die Verwendung der Variablen $PHP_SELF ist sichergestellt, dass der Skript auch weiterhin funktioniert, wenn
dessen Dateiname geändert wird.
Die Daten der einzelnen Formularelemente stehen im aufgerufenen Skript auf einfache Weise zur Verfügung, indem deren
Namen einfach ein $ vorangestellt wird. Der Inhalt des Textfeldes mit dem Namen beitrag beispielsweise steht als PHPVariable $beitrag zur Verfügung, usw.
Das Attribut method='post' in o.g. einführenden Formular-Tag führt dazu, dass die Formulardaten im
Nachrichtenkörper übertragen werden.
Um Beiträge zum Gästebuch hinzuzufügen sind folgende
Schritte erforderlich:
$go == 1
•
Eintragen von mindestens Namen und Beitrag in die
Wahr
Falsch
betreffenden Formularfelder
Bei Name oder Beitrag ist
keine Aktion
nichts eingetragen
•
Übernahme eines neuen Gästebucheintrages in die
Datenbank durch Betätigen des Buttons "Absenden"
Wahr
Falsch
•
JavaScript-Meldung
Neue Beitrag in
Anzeige des neuen Datensatzes als ersten in der Liste der
"Bitte alle
Datenbank schreiben
vorhandenen Einträge
erforderlichen Felder
Bevor ein neuer Datensatz in der Datenbank gespeichert wird,
ausfüllen."
wird ein Codeabschnitt durchlaufen (s. Listing, Zeile 23-40,
Seite 9), der durch nebenstehendes Struktogramm veranschaulicht wird: Die Variable $go enthält nur dann den Wert 1,
wenn das Formular abgesendet wurde. $go repräsentiert den Wert des versteckten Formularelementes mit dem Namen
go. Wenn also die Seite mit dem Gästebuch erstmals aufgerufen wird oder wenn ein erneuter Aufruf es Skriptes infolge der
Blätterfunktion erfolgt, werden die Formulardaten nicht übertragen, die Variable $go existiert nicht, hat demzufolge auch
nicht den Wert 1 - und es wird kein neuer Datensatz angelegt.
Nach diesem Test wird durch den Ausdruck ($name == "" || $beitrag == "") in der Verzweigungsbedingung
noch überprüft, ob in die dazugehörigen Formularfelder "name" und "beitrag" etwas eingetragen wurde. Ist das nicht der
Fall, wird kein neuer Beitrag in das Gästebuch geschrieben, und es wird in einem Popup-Fenster mittels JavaScript eine
diesbezügliche Meldung angezeigt.
Voraussetzung zum Anlegen eines neuen Datensatzes sind also:
1. das vorherige Betätigen von "Absenden" und
2. das Ausfüllen aller Pflichtfelder.
Angelegt wird ein neuer Datensatz durch folgendes SQL-Statement:
INSERT INTO $TableName (name,email,datum,beitrag)
VALUES ('$name','$email','$datum','$beitrag')
Die Werte für VALUES werden den korrespondierenden Formularfeldern entnommen.
Beiträge anzeigen
Zuständig für die Anzeige vorhandener Gästebucheinträge ist der Codeabschnitt Zeile 87 bis 110 (s. Listing Seite 10).
Die anzuzeigenden Datensätze werden durch das SQL-Statement
SELECT * FROM $TableName ORDER BY ID DESC LIMIT $pos,$BeitraegeProSeite
festgelegt, gespeichert in der Variabeln $sql.
ORDER BY ID DESC legt fest, dass nach dem Feld ID absteigend sortiert wird. Damit befindet sich der aktuelle
Datensatz immer am Beginn der Ergebnisliste.
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 5 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
Durch LIMIT von, Anzahl wird ab einem Wert, der durch $pos bestimmt ist, nur die Anzahl Datensätze angezeigt,
die dem Inhalt der Variablen $BeitraegeProSeite entspricht.
Mit dem Ausdruck $Resultat = mysql_query ($sql) wird das beschriebene SQL-Statement ausgeführt. Das es
sich um eine SQL-Select-Anweisung handelt, wird dadurch eine Ergebnisliste zurückgeliefert, repräsentiert durch die
Variable $Resultat.
Innerhalb einer While-Schleife (Zeilen 91 bis 110! ) werden Daten zeilenweise aus der Ergebnisliste ausgelesen und
entsprechenden Variablen zugewiesen. Der Inhalt dieser Variabeln wiederum wird im HTML-Teil der Schleife angezeigt,
bewirkt durch eine PHP-Insel für jede Variable.
Diese prinzipielle Wirkungsweise ist in nebenstehendem
Solange Zeilen in $Resultat vorhanden sind
Struktogramm dargestellt.
Name in Variable $name schreiben
Emailadresse in Variable $email schreiben
Die Laufbedingung der Schleife lautet konkret:
$zeile=mysql_fetch_array($Resultat)
Die Funktion mysql_fetch_array() überfuhrt die
Datum in Variable $datum schreiben
Beitrag in Variable $beitrag schreiben
Inhalt dieser Variablen als HTML ausgeben
Ergebnisliste zeilenweise in ein sog. assoziatives Array mit dem Namen $zeile. Bei assoziativen Arrays werden, im
Gegensatz zu indizierten Arrays, die einzelnen Zeilen des Datenfeldes durch Schlüsselwörter angesprochen. Diese
Schlüsselwörter entsprechen den Spaltennamen der zugrundeliegenden MySql-Tabelle. Somit kann beispielsweise durch
den Ausdruck $zeile["name"] der Inhalt des Arrayelementes name eines Datensatzes bzw. einer Zeile der
Ergebnisliste ermittelt werden.
mysql_fetch_array($Resultat)beginnt beim ersten Datensatz der Ergebnisliste und wandert nach der
Überführung der Daten in das assoziative Array $zeile automatisch zum nächsten Datensatz, bis das Ende der
Ergebnisliste erreicht ist.
Bemerkenswert ist noch folgende Tatsache: in Zeile 98 wird der PHP-Codeabschnitt zunächst einmal beendet, ohne dass
die schließende geschweifte Klammer des Blockes der Schleifenanweisungen erreicht wurde. Die Zeilen 100 bis 108
enthalten den HTML-Code zur Darstellung einer Zeile der Ergebnistabelle. Erst in Zeile 110 wird die Schleife durch die
Anweisung <?php } ?> abgeschlossen.
In den Zeilen 92, 93 und 96 wird die PHP-Funktion htmlspecialchars() verwendet. Diese wandelt wichtige HTMLspezifische Zeichen so um, dass sie im Webbrowser dargestellt werden. Würde dies nicht erfolgen, könnte beispielsweise
ein vom Besucher eingegebenes einfaches </table> die gesamte Darstellung der Gästebuchseite zerstören.
htmlspecialchars() sorgt dafür, dass in diesem Fall </table> einfach nur angezeigt wird.
Das Formularfeld für die Erfassung der Gästebuchbeiträge ist mehrzeilig. Der Besucher kann Zeilenumbrüche durch
Verwendung der Enter-Taste erzeugen. Um diese Umbrüche in der HTML-Ergebnistabelle korrekt darzustellen, wird
bezogen auf die Variable $beitrag zusätzlich zu htmlspecialchars() die Funktion nl2br() verwendet. Dadurch
werden solche Umbrüche in das HTML-Tag <br> verwandelt und im Webbrowser auch als Umbrüche dargestellt.
Seitensteuerung / Blätterfunktion
Im Gästebuch wird jeweils nur ein Ausschnitt aus der Gesamtzahl an Beiträgen dargestellt, einstellbar durch die Variable
$BeitraegeProSeite. Das macht die Implementierung einer Blätterfunktion erforderlich.
Grundlegender Mechanismus dieser Blätterfunktion ist die Übertragung von Benutzerdaten innerhalb der Adresse. Dies
wird durch die Generierung von entsprechend gestalteten Links realisiert (s: Listing S. 9, Zeilen 47 bis 52).
Link auf frühere Einträge (Rückwärtsblättern):
<a href=$PHP_SELF?pos=($pos + $BeitraegeProSeite)><&lt Frühere Einträge</a>
Link auf spätere Einträge (Vorwärtsblättern):
<a href=$PHP_SELF?pos=($pos - $BeitraegeProSeite)>Spätere Einträge >&gt</a>
Auch hier ruft sich wie weiter oben bereits unter Punkt "Beitrag hinzufügen" beschrieben das Skript, bewirkt durch die
Verwendung von =$PHP_SELF , selbst auf. Man muss also auch an diesen Stellen bei eventueller Änderung des
Dateinamens des Skriptes nichts ändern.
Bis hierhin handelt es sich um einen ganz normalen Link auf die Datei index.php. Um zusätzlich dazu Daten vom
Webbrowser an den Server übertragen zu können werden diese, eingeleitet durch ?, als Argumente an die Adresse (nichts
anderes ist der Verweis auf index.php) angehängt. pos=x bildet ein Paar aus Name und Wert (getrennt mit einem &
könnten noch weitere solcher Paare angefügt werden).
Das Argument pos ist, ähnlich wie beim Übertragen von Daten mittels Formular, im aufgerufenen Skript als PHP-Variable
$pos verfügbar.
Die Herleitung der Formeln zur Berechnung der Linkziele für das Vorwärts- bzw. Rückwärtsblättern verdeutlicht die
folgende Abbildung. Man stelle sich die zugrundeliegende MySql-Tabelle blockweise geteilt und absteigend sortiert vor. Die
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 6 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
Länge der einzelnen Blöcke wird in der Konfigurationsdatei einstellungen.inc.php durch die Variable
$BeitraegeProSeite festgelegt.
Die Anzeige der einzelnen Blöcke und der Blätterlinks auf der Gästebuchseite ist in der Abbildung unterhalb der Überschrift
"Blätterfunktion" angedeutet.
Prinzipdarstellung der Seitensteuerung bzw. Blätterfunktion
Spalten der MySql-Tabelle
Blätterfunktion
ID
5
6
3
Name
...
...
weitere Felder
...
...
pos
13
12
1
spätere >> 8-11
7
9
10
11
...
...
...
...
...
...
...
...
11
10
9
8
12= 8+ 4
12-13 << frühere
spätere >> 4-7
12
14
15
16
...
...
...
...
...
...
...
...
7
6
5
4
8= 4+ 4
8-11 << frühere
spätere >> 0-3
17
18
19
20
...
...
...
...
...
...
...
...
3
2
1
0
4 = 0+ 4
4-7 << frühere
2
ergibt sich aus SQL-Sortierreihenfolge
Links nur anzeigen, wenn gilt:
$pos = $pos + $BeitraegeProSeite (Rückwärtsblättern)
1
$AnzahlEintraege > $pos + $BeitraegeProSeite
2
$pos - $BeitraegeProSeite >= 0
Linkziel
aktuelle Position
$pos = $pos - $BeitraegeProSeite (Vorwärtsblättern)
($AnzahlEintraege entspricht der Anzahl der Datensätze in
der MySql-Tabelle)
3
Blöcke ergeben sich aus der SQL-Anweisung LIMIT:
SELECT * FROM $TableName ORDER BY ID DESC LIMIT $pos,$BeitraegeProSeite
Die Anzeige der Blätterlinks wird durch folgende Codeabschnitte realisiert:
Oberhalb der Ergebnistabelle: s. Listing Zeilen 70 bis 83 auf Seite 10
Unterhalb der Ergebnistabelle: s. Listing Zeilen 114 bis 127 auf Seite 11
Die Blätterlinks werden mit echo $LinkFruehere bzw echo
$LinkSpaetere erzeugt.
($AnzahlEintraege > $pos +
$BeitraegeProSeite)
Wahr
Link auf frühere
Beiträge anzeigen
Sie werden jedoch entsprechend der nebenstehenden Struktogramme nur
angezeigt, wenn sich vor bzw. nach der aktuellen Position noch Daten befinden
(s. Abbildung Kreis 1 und Kreis 2).
($pos - $BeitraegeProSeite
>= 0)
Wahr
Weitere Elemente des Gästebuches
Link auf spätere
Beiträge anzeigen
Konfigurationsdatei einstellungen.inc.php
Diese Datei enthält die Einstellmöglichkeit für die Anzahl pro Seite darzustellenden Gästebucheinträge und wichtige
Angaben für MySql (Tabellen-, Datenbank- und Nutzernamename sowie Passwort).
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 7 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
Die Auslagerung dieser Angaben in eine eigenständige Datei ist deshalb sinnvoll, weil die MySql-Angaben in drei Dateien
benötigt werden: in index.php (der Hauptskript), in create-table.php und in admin/index.php (der Skript zum Löschen von
Gästebucheinträgen). Änderungen, z.B. des MySql-Serverpasswortes, sind im Bedarfsfall bei dieser Verfahrensweise nur
an einer einzigen Stelle notwenig, nämlich in einstellungen.inc.php.
Die Dateibezeichnung einstellungen.inc.php soll sicherstellen, dass der Inhalt der Datei nicht angezeigt wird. Würde die
Datei nur einstellungen.inc heißen, könnte ein Nutzer, der diesen Namen in die Adressleiste eingibt, deren Inhalt sehen. Die
zusätzliche Erweiterung .php führt dazu, dass in diesem Fall die Datei ausgeführt werden würde. Äußerlich wäre dann
nichts sichtbar.
Die Erweiterung .inc soll verdeutlichen, dass es sich um eine Datei handelt, die irgendwo eingebunden wird (include).
Datei create-table.php
Dient der Erzeugung der MySql-Tabelle. Dieser Skript ist sowohl lokal einmal auszuführen als auch, nach dem Transfer des
lokal erstellten und getesteten Gästebuches, auf dem öffentliche Server.
Datei admin/index.php
Mit diesem Skript können Beiträge gelöscht werden.
Wichtiger Hinweis: Wer ein Gästebuch betreibt, sollte regelmäßig und in nicht zu großen Zeitabständen den Inhalt
überprüfen. Unqualifizierte Beiträge und solche, die juristischen Ärger bereiten könnten, sollten gnadenlos gelöscht werden.
Verantwortlich für den Inhalt von Gästebüchern sind deren BetreiberInnen.
Die sicherste Möglichkeit ist, sich neue Beiträge per Email zuschicken zu lassen. Die erforderlichen PHP-Mechanismen
gehen aus der Übung 5 - Kontaktformular hervor.
Datei access.php
Der Admin-Bereich sollte natürlich vor Fremdzugriffen geschützt werden. Das ist sehr einfach möglich, indem im
Verzeichnis .../guestbook/admin der Skript access.php ausgeführt wird. Innerhalb des dann folgenden Dialoges kann der
betreffende Bereich mit Benutzernamen und Passwort geschützt werden.
Dabei entstehen im betreffenden Verzeichnis die Dateien .htaccess und .htpassword. Durch Löschen dieser Dateien kann
der Schutz wieder aufgehoben werden.
Wichtiger Hinweis: Nach dem Ausführen von accesse.php sollte die Datei auf dem öffentlichen Server wieder gelöscht
werden. Ansonsten könnte jeder, der diesen Skript ausführt, den Bereich mit neuen Zugriffsdaten versehen. accesse.php
sollte natürlich für eine eventuelle spätere Verwendung weiterhin lokal verfügbar sein.
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 8 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
PHP / MySQL - Kurs
Listing des Hauptskriptes (index.php)
1
2
3
4
5
6
7
8
9
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
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
//Wichtige Variablen laden:
include ("einstellungen.inc.php");
//Positionszähler für Seitensteuerung (Blättern) bei erstem
//Sktriptaufruf initialisieren:
if(isset($pos) == 0) {
$pos = 0;
}
/*Verbindung zur Datenbank herstellen
/ACHTUNG: vor dem Hochladen auf den Kurs-Server muss in der
/Datei 'einstellungen.inc.php' der Wert für '$passwort' auf 'phpmysql'
/ eingestellt werden.
*/
$fehlermeldung = "Fehler beim Konnektieren des MySQL-Servers.";
@mysql_connect("localhost",$DbUserName,$passwort) or die($fehlermeldung);
$fehlermeldung = "Fehler bei Auswahl der Datenbank '$DbName'.";
@mysql_select_db($DbName) or die($fehlermeldung);
//Daten in Datenbank schreiben:
//Wenn Formular abgesendet wurde:
if ($go == 1) {
//Wenn eines der erforderlichen Eingabefelder leer ist Meldung anzeigen.
//Diese wird mittels JavaScript erzeugt:
if ($name == "" || $beitrag == "") {
?>
<script language = 'JavaScript'>
window.alert('Bitte alle erforderlichen Felder ausfüllen.');
</script>
<?php
} else {
//Wenn alle erforderlichen Eingabefelder gefüllt sind und auf "Absenden"
//geklickt wurde, Übernahme in Datenbank (neuer Datensatz):
$datum = date ("Y-m-d");
mysql_query ("INSERT INTO $TableName
(name,email,datum,beitrag)
VALUES ('$name','$email','$datum','$beitrag')");
} //ENDE if
} //ENDE if
//Anzahl der Datensätze ermitteln:
$ResultatAlle = mysql_query ("SELECT ID from $TableName");
$AnzahlEintraege = mysql_num_rows($ResultatAlle);
//Links für das Blättern definieren:
$LinkFruehere = "<a href=".$PHP_SELF.
"?pos=".($pos + $BeitraegeProSeite).
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 9 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
PHP / MySQL - Kurs
"><&lt Frühere Einträge</a>";
$LinkSpaetere = "<a href=".$PHP_SELF.
"?pos=".($pos - $BeitraegeProSeite).
">Spätere Einträge >&gt</a>";
?>
<html>
<head>
<title>Gästebuch</title>
<link rel='stylesheet' href='formate.css' type='text/css'>
</head>
<body bgcolor='#C0DCC0'>
<center>
<h1>Gästebuch</h1>
<p><?php echo $AnzahlEintraege; ?> Beiträge insgesamt (aktuelle zuerst)</p>
<!--BEGINN Ergebnistabelle-->
<table border=0 align='center' width='85%'
cellspacing='3' cellpadding='3' class='tabtext' bgcolor='#AA9F55'>
<!--BEGINN obere Seitensteuerung-->
<tr>
<td width='50%' align='left' bgcolor='#AA9F55'>
<?php
//Ggf. Link für das Rückwärtsblättern erzeugen:
if ($AnzahlEintraege > $pos + $BeitraegeProSeite) {
echo $LinkFruehere;
}
?>
 </td>
<td width='50%' align='right' bgcolor='#AA9F55'>
<?php
//Ggf. Link für das Vorwärtsblättern erzeugen:
if ($pos - $BeitraegeProSeite >= 0) {
echo $LinkSpaetere;
}
?>
 </td>
</tr>
<!--ENDE obere Seitensteuerung-->
<?php
$sql = "SELECT * FROM $TableName ORDER BY ID DESC
LIMIT $pos,$BeitraegeProSeite";
$Resultat = mysql_query ($sql);
while ($zeile=mysql_fetch_array($Resultat)) {
$name=htmlspecialchars($zeile["name"]);
$email=htmlspecialchars($zeile["email"]);
$datum=$zeile["datum"];
$beitrag=$zeile["beitrag"];
$beitrag=htmlspecialchars($beitrag);
$beitrag=nl2br($beitrag);
?>
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 10 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
PHP / MySQL - Kurs
<!--BEGINN Ergebniszeile-->
<tr bgcolor='#FFFBF0'>
<td colspan='2'>
<b>Name:</b> <?php echo $name; ?>
  <b>Datum:</b> <?php echo $datum; ?>
 Email: <?php echo $email; ?>
<hr size='1' noshade>
<?php echo $beitrag; ?>
</td>
</tr>
<!--ENDE Ergebniszeile-->
<?php } ?>
<!--BEGINN untere Seitensteuerung-->
<tr>
<td width='50%' align='left' bgcolor='#AA9F55'>
<?php
//Ggf. Link für das Rückwärtsblättern erzeugen:
if ($AnzahlEintraege > $pos + $BeitraegeProSeite) {
echo $LinkFruehere;
}
?>
 </td>
<td width='50%' align='right' bgcolor='#AA9F55'>
<?php
//Ggf. Link für das Vorwärtsblättern erzeugen:
if ($pos - $BeitraegeProSeite >= 0) {
echo $LinkSpaetere;
}
?>
 </td>
</tr>
<!--ENDE untere Seitensteuerung-->
</table>
<!--ENDE Ergebnistabelle-->
<h2>Eigenen Beitrag verfassen:</h2>
<p>(Fettgedruckte Felder müssen ausgefüllt werden!)</p>
<!--BEGINN Formular - Formular ruft sich selbst auf ($PHP_SELF):-->
<form action=<? echo $PHP_SELF ?> method='post'>
<!--Verstecktes Feld 'go' - zur Kennzeichnung, ob Formular gesendet wurde-->
<input type='Hidden' name='go' value='1'>
<table border='0' align='center' width='85%' class='tabtext'
cellpadding='3' cellspacing='3' bgcolor='#AA9F55'>
<tr bgcolor='#AA9F55'>
<td><b>Name:</b></td>
<td>
<!--Eingabefeld für den Namen-->
<input type='Text' name='name' size='50'>
</td>
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 11 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
PHP / MySQL - Kurs
</tr>
<tr bgcolor="#AA9F55">
<td>Email: </td>
<td>
<!--Eingabefeld für Email-->
<input type='Text' name='email' size="50" maxlength="s">
</td>
</tr>
<tr bgcolor="#FFFBF0">
<td valign=top><b>Beitrag:</b> </td>
<td>
<!--Eingabefeld für den Textbeitrag-->
<textarea name='beitrag' cols='80' rows='10' class='tabtext'></textarea>
</td>
</tr>
<tr>
<td COLSPAN='2' ALIGN='CENTER' bgcolor="#AA9F55">
<input type='Submit' value='Abschicken'>
</td>
</tr>
</table>
</form>
<!--ENDE Formular-->
</center>
</body>
</html>
<?php
//DB-Verbindung schließen:
mysql_close();
?>
© R.-P. Keil
Übung 6 - Datenbankgestütztes Gästebuch - Beschreibung / Seite 12 von 12
04.02.05 16:10/ D:\WebProjekte\webwerft-berlin\@kurs\uebungen\u6\aufgabe\beschreibung-gb.doc / 27k / 20809 Zeichen
Herunterladen