gb-speichern.php
In dieser Datei werden die von der Vorschau erhaltenen Daten nochmals auf unzulässige Einträge überprüft.
Besonders wird auch hier nochmals geprüft, ob das Spamfeld auch nach dieser Übermittlung von der Vorschau noch leer ist. Sollte dies nicht der Fall sein, wird der weitere Vorgang unterbrochen und eine Fehlermeldung wird angezeigt.
Wenn im Speichen-Dokument diese Verarbeitungen erfolgreich abgeschlossen sind, werden die Eingaben, ohne dass der Anwender etwas machen muss, in eine Datenbank-Datei weitergeleitet und dort gespeichert.
Alle Angaben in dieser Datei sind in PHP-Befehlen geschrieben, die vom Server ausgeführt (geparst) werden, bevor sie an den Browser des Anwenders gesendet werden.
Die Befehle sind also für den Anwender nicht sichtbar. Auf dem Bildschirm erscheint nur eine Meldung bei Spamverdacht oder eine Erfolgsmeldung bei erfolgreich durchgeführten Operationen.
include/gb/verarbeiten.php
PHP-Befehle
Code: <?php
?>
<?php .... ?>
Die von der Vorschau an diese Datei gesendeten Eingaben werden zurerst wieder verarbeitet, bevor sie gespeichert werden.
Da dieser Text auch in der Vorschau verwendet wird, wurde er in einer "Include"-Datei erstellt und in die Dateien der Vorschau und Speichern eingelesen.
Die Angabe des Inhalts dieser Datei erfolgt in einem separaten Abschnitt dieser Anleitung.
<!-- Eingaben verarbeiten --> <?php include "../../include/gb/verarbeiten.php"; ?>
Wenn folgend Bedingung erfüllt ist, kann weitere Ablauf mit der Speicherung durchgeführt werden.
Wenn die Bedingung nicht erfüllt ist, wird der Vorgang abgebrochen.
<!-- Kontrolle und speichern --> <?php // Kontrolle ob das Spam-Feld leer ist if ( $xgb_spam ){ // in die Datenbank schreiben }
Code: date()
Befehl: $... = date("d.m.Y, G:i");
Fügt das Datum und die Zeit ein.
$...
Dies ist die neue Variable, in der das Datum und die Zeit
gespeichert sind.
(...)
In der Klammer sind die Platzhalter.
In der Klammer werden auch die Datums-Trennzeichen (der Punkt) und die Zeit-Formatierung (Doppelpunkt und h für Stunde eingegeben).
Verwendete Platzhalter
d - Tag des Monats, zwei Ziffern mit führenden Null (z.B. "05")
m - Monat mit führender Null ("01" bis "12)
Y - Jahr, vierstellige Ausgabe (z.B. "2001")
G - Stunde im 24-Stunden-Format ohne führende Null ("0" bis "23")
i - Minuten ("00" bis "59") L - Flag für Schalttjahr ("0" oder "1")
Befehl: $datum_zeit = date("d.m.Y, G:i");
$datum_zeit
Dies ist die Variable, die das Datum und die
Zeit enthält.
Damit wird festgehalten, wann der Anwender seinen Eintrag gemacht hat.
1) Quelltext im Gästebuch
$datum_zeit = date("d.m.Y, G:i");
2) Quelltext zur Anzeige dieses Beispiels in diesem Dokument
$datum_zeit = date("d.m.Y, G:i");
echo "$datum_zeit h";
<?php $datum_zeit = date("d.m.Y, G:i"); echo "$datum_zeit h"; ?>
3) Angezeigter Text dieses Beispiels in diesem Dokument
14.01.2025, 8:38 hGrundlagen und Workshops
phpbox.de de PHP-Befehlsreferenz > Datum & Zeit
phpbox.de de date("Formatierungsstring", ["Unix-Timestamp"])
Neue Variable: $zudaten="...";
In diese neue Variable werden alle Daten eingelesen, die im Gästebuch oben zugefügt werden sollen.
Es handelt sich um folgende Variablen: Name und E-Mail des Absenders, Thema und Einträge.
Hier kann auch ein Titel oder Text und die Codes für das automatische Speichern des Datums und der Zeit eingegeben werden.
Bemerkungen zur Formatierung
Der Titel "Thema" wurde "fett" formatiert.
Der Link für die "mailto" Adresse muss in einfache Anführungszeichen gesetzt werden, da der ganze Code bereits in doppelten Anführungszeichen ist.
Am Ende wurde zweimal \n
eingegeben, das ist ein Zeilenumbruch, der durch
php nur im Quelltext wirkt. Dadurch können die einzelnen
Einträge im Quelltext besser gelesen werden.
Der HTML-Text, der im Gästebuch sichtbar ist, wird dabei nicht
umgebrochen.
//Zusätzliche Daten $zudaten = "<h4>Thema: $gb_thema</h4> <p>$gb_eintrag</p> <p>Absender: <a href='mailto:$gb_email'>\n $gb_name</a>, $datum_zeit h</p> \n\n";
Code: str_replace("alt","neu","Zeichenkette")
Befehl: $... = str_replace("alt","neu",$...)
Ersetzt eine Zeichenfolge durch eine andere.
Ersetzt Teile einer Zeichenkette und gibt diese veränderte Zeichenkette zurück.
Anders ausgedrückt: Diese Funktion gibt einen String oder ein Array zurück, in dem alle Vorkommen von search innerhalb von subject durch den angegebenen replace-Wert ersetzt wurden.
alt
enthält dabei die alte Teil-Zeichenkette, die
jeweils durch neu
ersetzt wird.
Zweck
In der Datei mit den neuen Einträgen müssen die Zeilenumbrüche korrigiert werden.
Dabei müssen verschieden Zeichen in andere umgewandelt werden.
Befehl: $zudaten = str_replace("alt","neu",$zudaten);
(... $zudaten)
In dieser Variablen müssen Zeichen
durch andere ersetzt werden.
$zudaten = ...;
Dies ist die neue Variable (mit dem
gleichen Namen), in der die Zeichen ersetzt wurden.
1) $zudaten = str_replace("<br />","<br>",$zudaten);
Bei der Eingabe im Formular werden die Zeilenumbrüche mit dem Code
<br />
in die Dateien geschrieben.
Diese Befehle müssen in den Code <br>
umgewandelt werden.
$zudaten = str_replace("<br />","<br>",$zudaten);
2) $zudaten = str_replace("<br />","",$zudaten);
Die bei der früheren Verarbeitung in den HTML-Code umgewandelten
Codes <
und >
der Zeilenumbrüche mit
<br />
ergaben <br />
.
Diese nun nutzlosen Codes müssen gelöscht werden.
$zudaten = str_replace("<br />","",$zudaten);
3) $zudaten = str_replace("<p><br>","<p>",$zudaten);
$zudaten = str_replace("<p><br>","<p>",$zudaten);
4) $zudaten = str_replace("<br></p>","</p>",$zudaten);
$zudaten = str_replace("<br></p>","</p>",$zudaten);
Alle Befehle
$zudaten = str_replace("<br />","<br>",$zudaten); $zudaten = str_replace("<br />","",$zudaten); $zudaten = str_replace("<p><br>","<p>",$zudaten); $zudaten = str_replace("<br></p>","</p>",$zudaten);
Grundlagen und Workshops
Code: $... = "...";
Befehl: $datenbank = "gb-daten.dat";
Es wird festgelegt, in welcher Datei die Datenbank erstellt wird.
gb-daten.dat
In dieser Datei werden die Einträge
des Gästebuches gespeichert.
// Die Datenbank wird bezeichnet $datenbank = "../../gaestebuch/gb-daten.dat" ;
Code: fopen ("Dateiname", "Modus")
Öffnet eine Datei oder URL
Die Funktion fopen öffnet eine Datei zum Schreiben und/oder Lesen und gibt ein Dateihandle zurück.
Die Datei kann auch auf einem anderen Server liegen, in diesem Fall muss statt dem blossen Dateinamen eine komplette URL angegeben werden. Da keine HTTP-Redirects (Weiterleitungen) unterstüzt werden, muss eine URL ggf. mit abschliessendem "/" geschrieben werden.
Nachdem die Datei bearbeitet wurde, sollte das Dateihandle mit der Funktion fclose wieder geschlossen werden, damit andere Prozesse auf die Datei zugreifen können.
Modus
Der Parameter "Modus" bestimmt, für welche Form des Zugriffs die Datei geöffnet wird. Dabei sind folgende Modi möglich:
r
Datei wird nur zum Lesen geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
r+
Datei wird zum Lesen und Schreiben geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
w
Datei wird nur zum Schreiben geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
Sofern die Datei bereits besteht, wird die
Grösse auf 0 Bytes gesetzt
(d.h. ein eventueller Inhalt wird überschrieben).
Sofern die Datei nicht existiert, wird diese neu angelegt.
w+
Datei wird zum Lesen und Schreiben geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
Sofern die Datei bereits besteht, wird die
Grösse auf 0 Bytes gesetzt (d.h. ein eventueller
Inhalt wird überschrieben).
Sofern die Datei nicht existiert, wird diese neu angelegt.
a
Datei wird nur zum Schreiben geöffnet, der Dateizeiger wird an
das Ende der Datei gesetzt (d.h der Inhalt wird nicht überschrieben,
sondern neuer Inhalt am Dateiende hinzugefügt). Sofern die Datei
nicht existiert, wird diese neu angelegt.
a+
Datei wird zum Lesen und Schreiben geöffnet, der Dateizeiger
wird an das Ende der Datei gesetzt (d.h der Inhalt wird nicht
überschrieben, sondern neuer Inhalt am Dateiende hinzugefügt).
Sofern die Datei nicht existiert, wird diese neu angelegt.
Befehl: $gb_datei = fopen($datenbank,"r");
$datei
Dies ist der ausgegebene "Dateihandle", mit dem auf
die nun geöffnete Datei mit dem gewählten Modus zugegriffen
werden kann.
r
Datei wird nur zum Lesen geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
Die Datenbank wird geöffnet und der Modus, mit dem die Art des Zugriffs festlegt wird, wird angegeben.
// Die Datenbank wird zum Lesen geöffnet $gb_datei = fopen($datenbank,"r");
Grundlagen und Workshops
Code: fread("Datei-Handle","maximale Anzahl")
Befehl: $altdaten = fread($datei,10000);
$altdaten
In diese Variable werden die in der
Datenbank gespeicherten (alten) Daten gelesen.
$datei,10000);
Die Daten kommen aus der angegebenen
Variablen und haben eine maximale Länge wie angegeben.
// Die alten Daten einlesen $altdaten = fread($gb_datei,10000);
Grundlagen und Workshops
Prinzip: $a+b = "$a $b";
Befehl: $neudaten = "$zudaten $altdaten";
$neudaten
Dies sind die neuen Daten des Gästebuches.
"$zudaten $altdaten";
Die neuen Daten bestehen aus den
zugefügten und den alten Daten.
// Neue Daten aus zusätzlichen und alten Daten $neudaten = "$zudaten $altdaten";
Code: fclose ("Datei-Handle")
Befehl: fclose($datei);
Die Datenbank wird wieder geschlossen.
($datei)
Der Ausdruck in der Klammer wird als "Datei-Handle" bezeichnet.
Beim Gästebuch wird die Datei gb-daten.dat
geschlossen.
// Die Datenbank wird wieder geschlossen fclose($gb_datei);
Grundlagen und Workshops
Code: fopen("Dateiname","Modus")
Öffnet eine Datei oder URL
Die Funktion fopen öffnet eine Datei zum Schreiben und/oder Lesen und gibt ein Dateihandle zurück.
Die Datei kann auch auf einem anderen Server liegen, in diesem Fall muss statt dem blossen Dateinamen eine komplette URL angegeben werden. Da keine HTTP-Redirects (Weiterleitungen) unterstüzt werden, muss eine URL ggf. mit abschliessendem "/" geschrieben werden.
Nachdem die Datei bearbeitet wurde, sollte das Dateihandle mit der Funktion fclose wieder geschlossen werden, damit andere Prozesse auf die Datei zugreifen können.
Modus
Der Parameter "Modus" bestimmt, für welche Form des Zugriffs die Datei geöffnet wird. Dabei sind folgende Modi möglich:
r
Datei wird nur zum Lesen geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
r+
Datei wird zum Lesen und Schreiben geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
w
Datei wird nur zum Schreiben geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
Sofern die Datei bereits besteht, wird die
Grösse auf 0 Bytes gesetzt
(d.h. ein eventueller Inhalt wird überschrieben).
Sofern die Datei nicht existiert, wird diese neu angelegt.
w+
Datei wird zum Lesen und Schreiben geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
Sofern die Datei bereits besteht, wird die
Grösse auf 0 Bytes gesetzt (d.h. ein eventueller
Inhalt wird überschrieben).
Sofern die Datei nicht existiert, wird diese neu angelegt.
a
Datei wird nur zum Schreiben geöffnet, der Dateizeiger wird an
das Ende der Datei gesetzt (d.h der Inhalt wird nicht überschrieben,
sondern neuer Inhalt am Dateiende hinzugefügt). Sofern die Datei
nicht existiert, wird diese neu angelegt.
a+
Datei wird zum Lesen und Schreiben geöffnet, der Dateizeiger
wird an das Ende der Datei gesetzt (d.h der Inhalt wird nicht
überschrieben, sondern neuer Inhalt am Dateiende hinzugefügt).
Sofern die Datei nicht existiert, wird diese neu angelegt.
Befehl: $datei = fopen($datenbank,"w");
$datei
Dies ist der ausgegebene "Dateihandle", mit dem auf
die nun geöffnete Datei mit dem gewählten Modus zugegriffen werden
kann.
fopen($datenbank,"w");
Die Datenbank wird geöffnet und
der Modus wird angegeben.
w
Datei wird nur zum Schreiben geöffnet,
der Dateizeiger wird auf den Anfang der Datei gesetzt.
Sofern die Datei bereits besteht, wird die
Grösse auf 0 Bytes gesetzt
(d.h. ein eventueller Inhalt wird überschrieben).
Sofern die Datei nicht existiert, wird diese neu angelegt.
// Die Datenbank wird zum Schreiben geöffnet $gb_datei = fopen($datenbank,"w");
Grundlagen und Workshops
Code: fwrite("Datei-Handle","Daten"[,"maximale Anzahl"])
Schreibt Text in eine Datei
Die Funktion fwrite
schreibt den Inhalt der Zeichenkette "Daten" in die
Datei, auf die das Dateihandle "Datei-Handle" zeigt.
(Das Datei-Handle" muss vorher mit fopen erstellt worden sein)
Für den Schreibvorgang ist es erforderlich, dass sowohl für das ausführende Skript, als auch für das Verzeichnis in das geschrieben wird, die entsprechenden Schreibrechte vergeben sind (vgl. chmod).
Wenn der optionale Parameter "maximale Anzahl" angegeben ist, wird - je nachdem was zuerst eintritt - der Schreibvorgang bis zum Ende der Zeichenkette "Daten" oder der in "maximale Anzahl" angegebenen Anzahl von Bytes fortgeführt.
Befehl: fwrite($datei, $daten);
// Schreibt die neunen Daten in die Datenbank fwrite($gb_datei, $neudaten);
Grundlagen und Workshops
Code: fclose("Datei-Handle")
Schliesst eine offene Datei.
Die Funktion fclose schliesst eine zuvor geöffnete Datei auf die das Dateihandle "Datei-Handle" zeigt.
Dies ist notwendig, damit andere Prozesse auf die Datei zugreifen können.
Befehl: fclose($datei);
Nach all dem wird die Datenbank wieder geschlossen.
($datei)
Der Ausdruck in der Klammer wird als "Datei-Handle" bezeichnet.
In unserem Fall wird die Datei gb-datei.dat
geschlossen.
// Schliesst die Datenbank fclose($gb_datei);
Grundlagen und Workshops
Prinzip
Link: <a href="../../gaestebuch#eintraege">...</a>
Anzeige ...: Gästebuch mit den neuen Einträgen
// Link zu den Einträgen im Gästebuch zeigen echo ' <h3> <br><br><br><br> <a href="../gaestebuch#eintraege"> Gästebuch mit den neuen Einträgen </a></h3>';
<!-- Eingaben verarbeiten --> <?php include "../include/gb/verarbeiten.php"; ?> <!-- Kontrolle und speichern --> <?php // Kontrolle ob das Spam-Feld leer ist if ( $xgb_spam ){ // in die Datenbank schreiben $datum_zeit = date("d.m.Y, G:i"); //Zusätzliche Daten $zudaten = "<h4>Thema: $gb_thema</h4> <p>$gb_eintrag</p> <p>Absender: <a href='mailto:$gb_email'>\n $gb_name</a>, $datum_zeit h</p> \n\n"; $zudaten = str_replace("<br />","<br>",$zudaten); $zudaten = str_replace("<br />","",$zudaten); $zudaten = str_replace("<p><br>","<p>",$zudaten); $zudaten = str_replace("<br></p>","</p>",$zudaten); // Die Datenbank wird bezeichnet $datenbank = "../../gaestebuch/gb-daten.dat" ; // Die Datenbank wird zum Lesen geöffnet $gb_datei = fopen($datenbank,"r"); // Die alten Daten einlesen $altdaten = fread($gb_datei,10000); // Neue Daten aus zusätzlichen und alten Daten $neudaten = "$zudaten $altdaten"; // Die Datenbank wird wieder geschlossen fclose($gb_datei); // Die Datenbank wird zum Schreiben geöffnet $gb_datei = fopen($datenbank,"w"); // Schreibt die neunen Daten in die Datenbank fwrite($gb_datei, $neudaten); // Schliesst die Datenbank fclose($gb_datei); // Link zu den Einträgen im Gästebuch zeigen echo ' <h3> <br><br><br><br> <a href="../../gaestebuch#eintraege"> Gästebuch mit den neuen Einträgen </a></h3>'; } ?>↑