Formular: Aktion "an interne Seite übergeben" nutzen - Teil 1
Die Daten eines Formulars werden in weblica per Vorgabe als Mail versendet. In den Absatz-Eigenschaften für das Formular haben Sie aber auch die Möglichkeit, die Formular-Daten an eine interne Seite in Ihrem Projekt zu übergeben. Dort können Sie die Daten dann nach Bedarf weiter verarbeiten.
Im vorliegenden ersten Teil erklären wir die Grundlagen.
Das Beispiel

Ein einfaches Formular mit zwei Feldern, das wir an eine interne Seite übergeben.

Die Zeilseite mit unserem PHP-Skript, das die Formulardaten ausgibt.
Schritt 1: Detailsseite für die Verarbeitung der Formular-Daten anlegen
Legen Sie eine neue Detailseite in Ihrem Projekt an, öffnen Sie die Seiten-Eigenschaften und ändern Sie auf der Registerkarte HTML/CSS die Endung des Dateinamens auf .php. Damit stellen Sie sicher, dass der nötige Code für die Auswertung der Formulardaten auch ausgeführt wird.
Schritt 2: Einfügen eines HTML-Absatz
Legen Sie nun einen neuen HTML-Absatz an. In ihm hinterlegen wir den PHP-Code für das Auslesen der vom Formular übergebenen Daten.
Schritt 3: Vorbereiten des Formulars
Wenn Sie noch keine Seite haben, auf dem Sie Ihr Formular unterbringen können, legen Sie eine neue Haupt- oder Detailseite an.
Fügen Sie im Hauptinhalt einen Formular-Absatz ein.
Öffnen Sie die Absatz-Eigenschaften und wechseln Sie auf die Registerkarte Aktion. Wählen Sie dort die Option An interne Seite übergeben und wählen Sie die in Schritt 1 angelegte Detailseite als Zielseite aus. Übernehmen Sie die Änderung mit OK.
Damit ist der Formular-Absatz vorbereitet und wir können uns wieder unserer Zielseite mit dem Skript widmen.
Schritt 4: PHP-Code für das Auslesen der Formular-Daten
Der folgende Code liest die Formulardaten aus und gibt sie auf der Seite aus, ohne Schnickschnack oder schöne Formatierung:
<?php
function filter($value) {
return strip_tags($value);
}
$bodyText = "POST-Params: <br /> ";
foreach ($_POST as $name => $value) {
$value = filter($value);
$bodyText .= "$name: $value <br /> ";
}
echo $bodyText;
?>
Und so funktioniert das Skript
Beim Versenden eines Formulars übergibt weblica die Daten per so genannter POST-Anfrage an den Web-Server der Website. PHP ermöglicht den Zugriff auf diese Daten über die global verfügbare Variable $_POST. Es handelt sich hierbei um ein sog. assoziatives Array, was letztlich nichts anderes ist als eine Liste nach dem Muster Name = Wert; die folgende Zeile im Skript bringt dies zum Ausdruck:
foreach ($_POST as $name => $value) ...
Damit weisen wir PHP an, für jeden Einträge in der Liste etwas zu tun und zwar das, was zwischen den geschweiften Klammern { ... } steht. Weiter bewirkt die Anweisung, dass der Name und der Wert des jeweiligen Eintrags in entsprechenden Variablen bereit gestellt werden.
Die Behandlung der einzelnen Einträge ist hier im Beispiel bewusst einfach gewählt und wenig spektakulär: Der Wert des Eintrags wird ausgelesen und der Variablen $bodyText hinzu gefügt:
$bodyText .= "$name: $value <br /> ";
Da wir den Inhalt der Liste direkt auf der Seite ausgeben, hängen wir dem Wert noch einen Zeilenumbruch an; hierfür verwenden das HTML-Tag <br/>.
Haben Sie sich das Skript aufmerksam angeschaut, dann ist Ihnen sicher die Zeile unmittelbar vor dem Hinzufügen des jeweiligen Listeneintrags aufgefallen:
Die Funktion filter() haben wir ganz am Anfang des Skripts unter gebracht:
function filter($value) {
return strip_tags($value);
}
Darin rufen wir die von PHP angebotene Funktion strip_tags() auf, die alle sog. HTML-Tags aus den Daten entfernt. Warum? Damit wir uns davor schützen, dass böswillige Nutzer des Formulars uns HTML-, Javascript oder sogar PHP-Code unterjubeln können, der auf der Seite ausgeführt würde, auf der wir die Daten anzeigen. Es geht hier also um das Thema Sicherheit.
Das Entfernen der Tags ist das Mindeste, was Sie tun sollten, um sich vor Angreifern zu schützen. Je nach Art und Inhalt des Formulars müssen Sie Ihre Eingabe-Daten noch weiter säubern. Grundsätzlich gilt: Trauen Sie keinen Daten, die nicht von Ihnen stammen! Das heisst für Formulardaten: Misstrauen Sie sämtlichen Eingaben und geben Sie diese niemals ohne Bereinigung aus oder Speichern diese in einer Datenbank oder Datei zur späteren Anzeige.
Sicher ist sicher - Was passiert, wenn Sie Eingaben nicht filtern
Kommentieren Sie die Zeile mit dem Aufruf der filter()-Funktion einmal aus. Schlüpfen Sie dann mal in die Rolle eines Angreifers und geben Sie in einem Textfeld Ihres Formulars den nachfolgenden Text ein:
<script>alert('ich bin böse');</script>
Senden Sie das Formular und schauen Sie, was auf der Seite passiert, auf der wir den Inhalt des Formulars anzeigen. Wenn Sie alles richtig gemacht haben, erscheint ein Dialog-Feld:
Was ist hier passiert? Da die Eingaben ungefiltert als Teil unserer Seite angezeigt werden, landet das kleine und in unserem Fall zum Glück harmlose Skript direkt im Quellcode der Seite. Der Webbrowser weiss natürlich nicht, woher dieses Skript stammt, es liegt ja direkt im Quellcode der Seite. Daher führt er es brav aus.
Zugegeben, so eine kleine Alert-Box ist zwar peinlich aber kein Weltuntergang. Doch ein Angreifer wird sich nicht auf ein harmloses Alert beschränken. Er wird versuchen, Schadcode bei Ihnen einzuschleusen, um z.B. vertrauliche Informationen zu erlangen oder anderen Besuchern Ihrer Website Schadcode unter zu schieben. Und das ist nicht nur peinlich sondern gefährlich.
Daher an dieser Stelle nochmals der wichtige Grundsatz: Trauen Sie keinen Daten, die nicht von Ihnen stammen! Daten aus einem Web-Formular sind grundsätzlich nicht vertrauenswürdig.
Wie weiter
Die Verarbeitung der Formulardaten in einem eigenen Skript bietet Ihnen viele Möglichkeiten, die Daten nach Ihren Bedürfnissen zu behandeln:
- Versand als Mail per SMTP (wenn z.B. Ihr Provider die PHP-mail()-Funktion nicht unterstützt), siehe Teil 2: SMTP-Versand.
- Daten per Id des Feldes auslesen und verarbeiten.
- Ausgabe der Daten in einem weblica Text-Absatz.