In diesem Tutorial wird euch die Möglichkeit geboten ein Gästebuch in wenigen Schritten selbst programmieren zu können.
Alles was wir dafür brauchen ist:
- eine Textdatei in der die Daten gespeichert werden
- ein Datei ich welcher das Gästebuch angezeigt wird und in welchem sich auch das Formular befindet um weitere Einträge zu machen
Ich nenne einfach mal die Textdatei 'gaestebuch.txt'.
Vorweg sollten wir uns darüber Gedanken machen, was alles in einem solchem Gästebuch angezeigt werden soll.
Mir fallen da spontan ein:
- Name
- Datum
- Text
- eMail-Adresse
- IP dessen, der den Eintrag gemacht hat
Diese Liste ließe sich sicherlich erweitern, aber für den Anfang soll es reichen. Ihr könnt diese ja nach Belieben ergänzen!
Die php-Datei mit der das Gästebuch angezeigt werden soll beinhaltet auch das Formular (man könnte das auch auf 2 Dateien aufteilen).
Dann fang ich mal mit der php-Datei an. Die Struktur dieses Gästebuches soll wie folgt werden:
PHP-Code:
<?php
if()
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
}
?>
Es wird mit der
if-Anweisung überprüft, ob das Gästebuch ausgefüllt wurde, oder nicht. Abhängig davon wird der neue Eintrag in die Textdatei eingetragen, oder die vorhandenen Einträge werden angezeigt.
Natürlich muss der if()-Teil noch sinnvoll gefüllt werden, aber das kommt später - diese Stelle müßen wir uns aber merken!
Als nächstes wollen wir den Formular-Abschnitt bearbeiten:
Damit deine Besucher auch die Möglichkeit haben Einträge zu hinterlassen benötigen wir ein Formular.
PHP-Code:
<?php
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
?>
Die superglobale Variable
$_SERVER["PHP_SELF"] sorgt dafür, dass die Daten per POST an die gleiche Datei geschickt werden. Zusammen mit der if-else-Anweisung ist der Trick geschafft, warum wir nur eine php-Datei brauchen.
Nun, da wir das Formular kennen, können wir auch die if-Anweisung füllen. Sinnvoll ist das Überprüfen auf das Vorhandensein von den gedrücktem Button:
PHP-Code:
<?php
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
?>
Nun besteht also die Möglichkeit, Daten abzuschicken. Als nächstes also müßen wir uns darum kümmern, dass diese Daten auch verarbeitet werden.
Als übertragene Daten haben wir dann zur Verfügung:
$_POST['name']
$_POST['email']
$_POST['eintrag']
$_POST['button']
Letztere Variable beinhaltet keinen brauchbaren Wert, außer für die Überprüfung in dem if-Konstrukt können wir diese vernachlässigen.
Wir wollten aber zusätzlich noch die IP und den Zeitpunkt abspeichern.
Den Zeitpunkt halten wir sekundengenau fest. Das geht mit der Funktion date(
date('d.m.Y - H:i:s')
Die IP kann erfasst werden durch die superglobale Server-Variable:
$_SERVER["REMOTE_ADDR"]
Damit sieht der Quellcode nun so aus:
PHP-Code:
<?php
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)
// als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden.
// das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig!
$eintrag = date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";
// Der Name der Gästebuch-Datei lautet:
$datenbankdatei = 'gaestebuch.txt';
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
$file = fopen($datenbankdatei,"a");
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
fwrite($file, $eintrag);
// Datei schliessen
fclose($file);
// Ausgabe für den user:
echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>';
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
echo '<h2>mein Gästebuch</h2>';
// Trennlinie zwischen alten Einträgen und dem Formular:
echo '<hr />';
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
?>
Da nun die Struktur der Datenbank-Datei festliegt können wir uns nun an das Werk machen und diese Daten für die Anzeige wieder herausholen.
Das Öffnen einer Datei zum lesen geschieht mit fopen mit dem Modus 'r':
$file = fopen ($datenbankdatei, "r");
Nun wird zeilenweise ausgelesen. Eine einzelne Zeile kann mir
fgets ausgelesen werden. Mit
feof wird überrüft, ob wir bereits am Ende der Datei angelangt sind. Mit
while wird das solange wiederholt, bis die Datei vollständig ausgelesen wurde.
Hier erstmal der Code:
PHP-Code:
<?php
// Öffnen der Datei im Lese-Modus:
$file = fopen($datenbankdatei, 'r');
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde
while (!feof($file))
{
// Zeile für Zeile auslesen:
$zeile = fgets($file, 5000);
$daten = explode(" || ", $zeile);
$datum = $daten[0];
$ip = $daten[1];
$name = $daten[2];
$email = $daten[3];
$eintrag = $daten[4];
}
fclose($file);
?>
mit der Funktion
explode wird die ausgelesene Zeile wieder in die einzelen Daten zerlegt. Dies geschieht anhand der vorher definierten Trennzeichen ' || '.
Die geöffnete Datei wird wieder geschlossen.
Da nun die Daten wieder einzeln vorliegen fehlt nur noch die Ausgabe auf den Bildschirm:
PHP-Code:
<?php
echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';
?>
Dies muss natürlich nach jeder Zeile geschehen.
Da der Name der Textdatei mehrfach auftacht macht es Sinn, diese Variable nicht in der if-Anweisung oben zu deklarieren, sondern für beide Anweisungselemente. Daher taucht diese Variablendefinition nun ganz oben auf.
Der Code sieht damit nun wie folgt aus:
PHP-Code:
<?php
// Der Name der Gästebuch-Datei lautet:
$datenbankdatei = 'gaestebuch.txt';
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)
// als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden.
// das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig!
$eintrag = date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
$file = fopen($datenbankdatei,"a");
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
fwrite($file, $eintrag);
// Datei schliessen
fclose($file);
// Ausgabe für den user:
echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>';
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
echo '<h2>mein Gästebuch</h2>';
// Öffnen der Datei im Lese-Modus:
$file = fopen($datenbankdatei, 'r');
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde
while (!feof($file))
{
// Zeile für Zeile auslesen:
$zeile = fgets($file, 5000);
$daten = explode(" || ", $zeile);
$datum = $daten[0];
$ip = $daten[1];
$name = $daten[2];
$email = $daten[3];
$eintrag = $daten[4];
// Ausgabe auf den Bildschirm:
echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';
}
fclose($file);
// Trennlinie zwischen alten Einträgen und dem Formular:
echo '<hr />';
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
?>
Die optisch ansprechende Aufbereitung bleibt natürlich euch überlassen!
Damit wäre das Gästebuch theoretisch fertig.
Es fehlen damit aber noch einige angenehme Elemente:
- email-Benachrichtigung
- Überprüfung der Daten (beim Eintragen)
- Überprüfung der Daten bei der Ausgabe
- Überpüfung, ob die Textdatei überhaupt vorhanden ist
- ...
Ein ganz wesentlicher Punkt ist die Sicherheit! Es kann vorkommen, dass mehrere Leute gleichzeitig in die Textdatei schreiben wollen. Das muss verhindert werden, sonst kann sein, dass danach alles weg ist.
Als erstes die Überprüfung, ob die Datei vorhanden ist. Wenn nicht, dann der Versuch, diese zu erzeugen. Erst wenn auch das ohne Erfolg war, das Kript abbrechen:
PHP-Code:
<?php
// Der Name der Gästebuch-Datei lautet:
$datenbankdatei = 'gaestebuch.txt';
// Überprüfung, ob die Datei vorhanden ist.
// wenn nicht vorhanden, dann versuche diese zu erstellen
// wenn das Erstellen nicht erfolgreich war (mangelnde Rechte), dann Skript abbrechen
if(!file_exists($datenbankdatei))
if(!@touch($datenbankdatei))
die("Fehler: Die Datenbank ist nicht erreichbar.");
?>
Als nächstes eine eMail-Nachricht an den Betreiber:
PHP-Code:
<?php
// eMail wird verschickt:
@mail($mailempfaenger, "Gästebucheintrag", "Folgender Eintrag wurde hinterlassen:\n\nName: ".$_POST['name']."\nAbsender: ".$_POST['email']."\nText: ".$_POST['eintrag']."\n\nIP: ".$_SERVER["REMOTE_ADDR"]."\n".date('d.m.Y - H:i:s'), "From: ".$_POST['email']."\r\nX-Mailer: PHP/" . phpversion());
?>
Bei der Arbeit mit Textdateien kann es vorkommen, dass es mehr leere Zeilen gibt, als in diesem Falle Einträge.
Das kann man abfangen indem man die Ausgabe ändert:
PHP-Code:
<?php
// Ausgabe auf den Bildschirm:
if($name != "" && $eintrag != "")
echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';
?>
Auf gleichem Wege könnte man auch eine unterschiedliche Ausgabe machen, ob nun eine eMail-Adresse angegeben wurde, oder nicht. Davon abhängig den link setze - oder nicht, aber das überlasse ich euch!
Wenn nun jmd. versucht einen leeren Eintrag zu erzeugen, so würde er nicht mehr angezeigt werden. Um leere Einträge bei der Eingabe zu verhindern wird das Skript nun überprüfen, ob mindestens der Name und eine Nachricht hinterlassen wurden.
Damit sieht das Skript nun wie folgt aus:
PHP-Code:
<?php
// Der Name der Gästebuch-Datei lautet:
$datenbankdatei = 'gaestebuch.txt';
$mailempfaenger = 'info@domain.de';
// Überprüfung, ob die Datei vorhanden ist.
// wenn nicht vorhanden, dann versuche diese zu erstellen
// wenn das Erstellen nicht erfolgreich war (mangelnde Rechte), dann Skript abbrechen
if(!file_exists($datenbankdatei))
if(!@touch($datenbankdatei))
die("Fehler: Die Datenbank ist nicht erreichbar.");
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)
// ÜBerprüfe, ob Name und Text angegeben wurde - sonst kein Eintrag
if($_POST['name'] == "" || $_POST['eintrag'] == "")
{
echo 'Es fehlen Angaben. Bitte vollständig ausfüllen';
}
else
{
// als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden.
// das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig!
$eintrag = date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
$file = fopen($datenbankdatei,"a");
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
fwrite($file, $eintrag);
// Datei schliessen
fclose($file);
// Ausgabe für den user:
echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>';
// eMail wird verschickt:
@mail($mailempfaenger, "Gästebucheintrag", "Folgender Eintrag wurde hinterlassen:\n\nName: ".$_POST['name']."\nAbsender: ".$_POST['email']."\nText: ".$_POST['eintrag']."\n\nIP: ".$_SERVER["REMOTE_ADDR"]."\n".date('d.m.Y - H:i:s'), "From: ".$_POST['email']."\r\nX-Mailer: PHP/" . phpversion());
}
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
echo '<h2>mein Gästebuch</h2>';
// Öffnen der Datei im Lese-Modus:
$file = fopen($datenbankdatei, 'r');
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde
while (!feof($file))
{
// Zeile für Zeile auslesen:
$zeile = fgets($file, 5000);
$daten = explode(" || ", $zeile);
$datum = $daten[0];
$ip = $daten[1];
$name = $daten[2];
$email = $daten[3];
$eintrag = $daten[4];
// Ausgabe auf den Bildschirm:
if($name != "" && $eintrag != "")
echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';
}
fclose($file);
// Trennlinie zwischen alten Einträgen und dem Formular:
echo '<hr />';
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
?>
Nun sind nur noch 2 wichtige Dinge unberücksichtigt:
- Was ist, wenn in die Textdatei nicht geschrieben werden kann?
- Der Zugriff mehrerer gleichzeitig muss verhindert werden!
Das Fehlen der Rechte kann so abgefangen werden:
PHP-Code:
<?php
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
// Wenn die Datei nicht geöffnet werden kann: Abbruch
if(!$file = @fopen($datenbankdatei,"a"))
die("Fehler: Die Datenbank ist nicht erreichbar.");
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
// Wenn die Datei nicht beschrieben werden kann: Abbruch
if(!@fwrite($file, $eintrag))
die("Fehler: Die Datenbank ist nicht erreichbar.");
?>
Damit fehlt nur noch ein Management, damit nicht mehrere Zugriff gleichzeitig haben.
Dafür hält PHP etwas bereit: flock()
PHP-Code:
<?php
// Datei öffnen
// Datei für andere sperren
flock($file,LOCK_EX) or die();
// ...
// Sperre der Datei wieder aufheben
flock($file,LOCK_UN) or die();
// Datei schliessen
fclose($file);
?>
Damit sieht das Gästebuch nun so aus:
PHP-Code:
<?php
// für den Fall, das Fehler im Skript sind:
error_reporting(E_ALL);
// Der Name der Gästebuch-Datei lautet:
$datenbankdatei = 'gaestebuch.txt';
$mailempfaenger = 'info@domain.de';
// Überprüfung, ob die Datei vorhanden ist.
// wenn nicht vorhanden, dann versuche diese zu erstellen
// wenn das Erstellen nicht erfolgreich war (mangelnde Rechte), dann Skript abbrechen
if(!file_exists($datenbankdatei))
if(!@touch($datenbankdatei))
die("Fehler: Die Datenbank ist nicht erreichbar.");
if(isset($_POST['button']))
{
// wenn das Formular abgeschickt wurde, dann führe das hier aus (Daten in die Datei eintragen)
// ÜBerprüfe, ob Name und Text angegeben wurde - sonst kein Eintrag
if($_POST['name'] == "" || $_POST['eintrag'] == "")
{
echo 'Es fehlen Angaben. Bitte vollständig ausfüllen';
}
else
{
// als erstes werden die Daten zu einem langen string zusammengefasst. Damit die einzelnen Variablen später wieder getrennt werden können setzen wir ein Trennzeichen. In diesem Fall habe ich mich für || entschieden.
// das \n am Ende sorgt dafür, dass ein Zeilenumbruch in der Textdatei gemacht wird. Das ist für das Auslesen wichtig!
$eintrag = date('d.m.Y - H:i:s').' || '.$_SERVER["REMOTE_ADDR"].' || '.$_POST['name'].' || '.$_POST['email'].' || '.$_POST['eintrag']."\n";
// Nun wird die Datei geöffnet. Der Modus 'a' gibt an, dass die Datei zum Schreiben geöffnet wurde und die Daten hinten dran gehängt werden
// Wenn die Datei nicht geöffnet werden kann: Abbruch
if(!$file = @fopen($datenbankdatei,"a"))
die("Fehler: Die Datenbank ist nicht erreichbar.");
// Datei für andere sperren
flock($file,LOCK_EX) or die();
// mit fwrite werden nun die Daten, welche wir vorher zu einer Variable zusammengefasst haben hineingeschrieben
// Wenn die Datei nicht beschrieben werden kann: Abbruch
if(!@fwrite($file, $eintrag))
die("Fehler: Die Datenbank ist nicht erreichbar.");
// Sperre der Datei wieder aufheben
flock($file,LOCK_UN) or die();
// Datei schliessen
fclose($file);
// Ausgabe für den user:
echo '<h2>Danke für deinen Eintrag</h2>Die Daten wurden erfolgreich aufgenommen.<br /><a href="'.$_SERVER["PHP_SELF"].'">Zurück zum Gästebuch</a>';
// eMail wird verschickt:
@mail($mailempfaenger, "Gästebucheintrag", "Folgender Eintrag wurde hinterlassen:\n\nName: ".$_POST['name']."\nAbsender: ".$_POST['email']."\nText: ".$_POST['eintrag']."\n\nIP: ".$_SERVER["REMOTE_ADDR"]."\n".date('d.m.Y - H:i:s'), "From: ".$_POST['email']."\r\nX-Mailer: PHP/" . phpversion());
}
}
else
{
// wenn das Formular nicht ausgefüllt wurde, es also nur einfach angezeigt werden soll, dann führe diesen Teil aus:
// Anzeige der Einträge aus dem Gästebuch:
echo '<h2>mein Gästebuch</h2>';
// Öffnen der Datei im Lese-Modus:
$file = fopen($datenbankdatei, 'r');
// Solange wiederholen, bis die Datei vollständig ausgelesen wurde
while (!feof($file))
{
// Zeile für Zeile auslesen:
$zeile = fgets($file, 5000);
$daten = explode(" || ", $zeile);
$datum = $daten[0];
$ip = $daten[1];
$name = $daten[2];
$email = $daten[3];
$eintrag = $daten[4];
// Ausgabe auf den Bildschirm:
if($name != "" && $eintrag != "")
echo '<a href="mailto:'.$email.'">'.$name.'</a> schrieb am '.$datum.' folgendes:<br />'.$eintrag.'<br /><br />';
}
fclose($file);
// Trennlinie zwischen alten Einträgen und dem Formular:
echo '<hr />';
// Formular für weitere Einträge:
echo '<h2>neue Einträge:</h2>
<form method="post" action="'.$_SERVER["PHP_SELF"].'">
Ihr Name: <input type="text" name="name"><br />
eMail: <input type="text" name="email"><br />
Ihr Eintrag: <textarea name="eintrag"></textarea><br />
<input type="submit" name="button" value="Absenden">
</form>';
}
?>
Zu der Funktion flock solltet ihr jedoch unbedingt die Infos im PHP-Handbuch lesen. Dies Funktion stellt keinen zuverlässigen Schutz dar.
Jetzt solltet Ihr eigentlich in der Lage sein, das Script ohne Vorlage nachzuprogrammieren. Die verwendeten Funktionen findet Ihr alle im PHP-Manual.
Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im
PHP-Forum mit einem Verweis auf dieses Tutorial.
Danke.
Ich hoffe, dass ich Euch hier etwas weiterhelfen konnte.
Bei Verbesserungsvorschlägen würde ich mich über eine Nachrichtfreuen.
Grüße Jann Hendrik