Inhaltsverzeichnis

Anleitung Weiterverarbeitung von Formulardaten auf der Bestätigungsseite

Nach der Übermittlung eines Formulars werden die eingegebenen Daten automatisch in einer Session-Variable gespeichert. Dies ermöglicht es, auf der Bestätigungsseite auf die übermittelten Daten zuzugreifen und diese dem Nutzer anzuzeigen oder weiterzuverarbeiten.

Grundprinzip

Der Formularmailer speichert alle übermittelten Formulardaten in der Session-Variable $_SESSION['Formularmailer-Data']. Diese Daten können über die API-Datei api-session-formularmailer.php abgerufen werden.

Ablauf:

  1. Nutzer füllt das Formular aus und sendet es ab
  2. Formularmailer speichert die Daten in der Session
  3. Weiterleitung zur Bestätigungsseite (definiert über frm_forward)
  4. Bestätigungsseite ruft die Daten über die API ab und zeigt diese an

Beispiel 1: Einfaches Kontaktformular

Formular

<form action="cmd.php?id=-45" method="post">
    <input name="formular" type="hidden" value="Kontaktformular" />
    <input name="frm_forward" type="hidden" value="showpage.php?seite=bestaetigung_kontakt" />
    <input name="frm_notify_email" type="hidden" value="info@example.de" />
 
    <div class="mb-3">
        <label for="name" class="form-label">Name <span class="text-danger">*</span></label>
        <input type="text" class="form-control" id="name" name="name" required>
    </div>
 
    <div class="mb-3">
        <label for="email" class="form-label">E-Mail <span class="text-danger">*</span></label>
        <input type="email" class="form-control" id="email" name="email" required>
    </div>
 
    <div class="mb-3">
        <label for="anfrage" class="form-label">Ihre Anfrage <span class="text-danger">*</span></label>
        <textarea class="form-control" id="anfrage" name="anfrage" rows="5" required></textarea>
    </div>
 
    <button type="submit" class="btn btn-primary">Absenden</button>
</form>

Hinweis: Beachten Sie, dass im CMS keine Head-/Body-Tags zulässig sind!

Bestätigungsseite (bestaetigung_kontakt)

Erstellen Sie im CMS einen neuen Artikel mit dem Namen bestaetigung_kontakt und fügen folgenden Code ein:

    <style>
        .confirmation-box {
            background-color: #d4edda;
            border: 1px solid #c3e6cb;
            border-radius: 5px;
            padding: 20px;
            margin: 20px 0;
        }
        .data-table {
            width: 100%;
            margin-top: 20px;
        }
        .data-table th {
            text-align: left;
            padding: 8px;
            background-color: #f8f9fa;
            width: 30%;
        }
        .data-table td {
            padding: 8px;
        }
        .loading {
            color: #6c757d;
        }
        .error {
            color: #dc3545;
        }
    </style>
    <div class="confirmation-box">
        <h2>✓ Vielen Dank für Ihre Anfrage!</h2>
        <p>Wir haben folgende Daten von Ihnen erhalten:</p>
        <div id="output" class="loading">Lade Daten...</div>
    </div>
 
    <script>
        (function() {
            var output = document.getElementById('output');
 
            fetch('api-session-formularmailer.php', { credentials: 'same-origin' })
                .then(function(response) {
                    if (!response.ok) {
                        throw new Error('Fehler beim Laden der Daten: ' + response.status);
                    }
                    return response.json();
                })
                .then(function(json) {
                    if (!json.success) {
                        output.innerHTML = '<p class="error">' + (json.message || 'Keine Daten verfügbar.') + '</p>';
                        return;
                    }
 
                    var data = json.data || {};
                    var name = data.name || '(nicht angegeben)';
                    var email = data.email || '(nicht angegeben)';
                    var anfrage = data.anfrage || '(nicht angegeben)';
 
                    var html = '<table class="data-table">';
                    html += '<tr><th>Name:</th><td>' + escapeHtml(name) + '</td></tr>';
                    html += '<tr><th>E-Mail:</th><td>' + escapeHtml(email) + '</td></tr>';
                    html += '<tr><th>Anfrage:</th><td>' + escapeHtml(anfrage).replace(/\n/g, '<br>') + '</td></tr>';
                    html += '</table>';
                    html += '<p style="margin-top: 20px;">Wir werden uns schnellstmöglich bei Ihnen melden.</p>';
 
                    output.innerHTML = html;
                })
                .catch(function(error) {
                    output.innerHTML = '<p class="error">' + error.message + '</p>';
                });
 
            function escapeHtml(text) {
                var div = document.createElement('div');
                div.textContent = text;
                return div.innerHTML;
            }
        }());
    </script>

Beispiel 2: Formular mit Checkbox-Auswahl (Arrays)

Dieses Beispiel zeigt ein Anmeldeformular für eine Veranstaltung, bei dem mehrere Workshops ausgewählt werden können.

Formular

<form action="cmd.php?id=-45" method="post">
    <input name="formular" type="hidden" value="Veranstaltungsanmeldung" />
    <input name="frm_forward" type="hidden" value="showpage.php?seite=bestaetigung_anmeldung" />
    <input name="frm_notify_email" type="hidden" value="veranstaltung@example.de" />
 
    <div class="mb-3">
        <label for="vorname" class="form-label">Vorname <span class="text-danger">*</span></label>
        <input type="text" class="form-control" id="vorname" name="vorname" required>
    </div>
 
    <div class="mb-3">
        <label for="nachname" class="form-label">Nachname <span class="text-danger">*</span></label>
        <input type="text" class="form-control" id="nachname" name="nachname" required>
    </div>
 
    <div class="mb-3">
        <label for="email" class="form-label">E-Mail <span class="text-danger">*</span></label>
        <input type="email" class="form-control" id="email" name="email" required>
    </div>
 
    <div class="mb-3">
        <label class="form-label">Workshop-Auswahl <span class="text-danger">*</span></label>
        <div class="form-check">
            <input class="form-check-input" type="checkbox" name="workshops[]" value="Grundlagen der Hundeerziehung" id="ws1">
            <label class="form-check-label" for="ws1">Grundlagen der Hundeerziehung</label>
        </div>
        <div class="form-check">
            <input class="form-check-input" type="checkbox" name="workshops[]" value="Agility für Anfänger" id="ws2">
            <label class="form-check-label" for="ws2">Agility für Anfänger</label>
        </div>
        <div class="form-check">
            <input class="form-check-input" type="checkbox" name="workshops[]" value="Erste Hilfe am Hund" id="ws3">
            <label class="form-check-label" for="ws3">Erste Hilfe am Hund</label>
        </div>
        <div class="form-check">
            <input class="form-check-input" type="checkbox" name="workshops[]" value="Hundeernährung" id="ws4">
            <label class="form-check-label" for="ws4">Hundeernährung</label>
        </div>
    </div>
 
    <div class="mb-3">
        <label for="bemerkung" class="form-label">Bemerkungen</label>
        <textarea class="form-control" id="bemerkung" name="bemerkung" rows="3"></textarea>
    </div>
 
    <button type="submit" class="btn btn-primary">Jetzt anmelden</button>
</form>

Bestätigungsseite (bestaetigung_anmeldung)

Erstellen Sie im CMS einen neuen Artikel mit dem Namen bestaetigung_anmeldung und fügen folgenden Code ein:

    <style>
        .confirmation-box {
            background-color: #d4edda;
            border: 1px solid #c3e6cb;
            border-radius: 5px;
            padding: 20px;
            margin: 20px 0;
        }
        .data-table {
            width: 100%;
            margin-top: 20px;
        }
        .data-table th {
            text-align: left;
            padding: 8px;
            background-color: #f8f9fa;
            width: 30%;
            vertical-align: top;
        }
        .data-table td {
            padding: 8px;
        }
        .workshop-list {
            list-style-type: none;
            padding-left: 0;
            margin: 0;
        }
        .workshop-list li {
            padding: 5px 0;
        }
        .workshop-list li:before {
            content: "✓ ";
            color: #28a745;
            font-weight: bold;
        }
        .loading {
            color: #6c757d;
        }
        .error {
            color: #dc3545;
        }
    </style>
    <div class="confirmation-box">
        <h2>✓ Ihre Anmeldung war erfolgreich!</h2>
        <p>Folgende Daten haben wir von Ihnen erhalten:</p>
        <div id="output" class="loading">Lade Daten...</div>
    </div>
 
    <script>
        (function() {
            var output = document.getElementById('output');
 
            fetch('api-session-formularmailer.php', { credentials: 'same-origin' })
                .then(function(response) {
                    if (!response.ok) {
                        throw new Error('Fehler beim Laden der Daten: ' + response.status);
                    }
                    return response.json();
                })
                .then(function(json) {
                    if (!json.success) {
                        output.innerHTML = '<p class="error">' + (json.message || 'Keine Daten verfügbar.') + '</p>';
                        return;
                    }
 
                    var data = json.data || {};
                    var vorname = data.vorname || '(nicht angegeben)';
                    var nachname = data.nachname || '(nicht angegeben)';
                    var email = data.email || '(nicht angegeben)';
                    var bemerkung = data.bemerkung || '(keine Bemerkungen)';
                    var workshops = data.workshops || [];
 
                    // Array-Prüfung: Wenn workshops ein String ist, in Array umwandeln
                    if (typeof workshops === 'string') {
                        workshops = [workshops];
                    }
 
                    var html = '<table class="data-table">';
                    html += '<tr><th>Vorname:</th><td>' + escapeHtml(vorname) + '</td></tr>';
                    html += '<tr><th>Nachname:</th><td>' + escapeHtml(nachname) + '</td></tr>';
                    html += '<tr><th>E-Mail:</th><td>' + escapeHtml(email) + '</td></tr>';
                    html += '<tr><th>Gewählte Workshops:</th><td>';
 
                    if (workshops.length > 0) {
                        html += '<ul class="workshop-list">';
                        for (var i = 0; i < workshops.length; i++) {
                            html += '<li>' + escapeHtml(workshops[i]) + '</li>';
                        }
                        html += '</ul>';
                    } else {
                        html += '<em>Keine Workshops ausgewählt</em>';
                    }
 
                    html += '</td></tr>';
                    html += '<tr><th>Bemerkungen:</th><td>' + escapeHtml(bemerkung).replace(/\n/g, '<br>') + '</td></tr>';
                    html += '</table>';
                    html += '<p style="margin-top: 20px;"><strong>Sie erhalten in Kürze eine Bestätigungs-E-Mail.</strong></p>';
 
                    output.innerHTML = html;
                })
                .catch(function(error) {
                    output.innerHTML = '<p class="error">' + error.message + '</p>';
                });
 
            function escapeHtml(text) {
                var div = document.createElement('div');
                div.textContent = text;
                return div.innerHTML;
            }
        }());
    </script>

Hinweis: Beachten Sie, dass im CMS keine Head-/Body-Tags zulässig sind!

Technische Details

Die Session-Variable

Alle Formulardaten werden in $_SESSION['Formularmailer-Data'] als assoziatives Array gespeichert. Die Schlüssel entsprechen den name-Attributen der Formularfelder.

Beispiel:

// Inhalt von $_SESSION['Formularmailer-Data'] nach dem ersten Formular:
Array (
    [name] => Max Mustermann
    [email] => max@example.de
    [anfrage] => Ich interessiere mich für...
)
 
// Inhalt nach dem zweiten Formular mit Checkboxen:
Array (
    [vorname] => Maria
    [nachname] => Musterfrau
    [email] => maria@example.de
    [workshops] => Array (
        [0] => Grundlagen der Hundeerziehung
        [1] => Erste Hilfe am Hund
    )
    [bemerkung] => Ich freue mich auf die Veranstaltung
)

Die API-Datei

Die Datei api-session-formularmailer.php gibt die Session-Daten als JSON zurück:

<?php
declare(strict_types=1);
 
if (session_status() === PHP_SESSION_NONE)
{
    @session_start();
}
 
header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
 
if ($_SERVER['REQUEST_METHOD'] !== 'GET')
{
    http_response_code(405);
    header('Allow: GET');
    echo json_encode([
        'success' => false,
        'message' => 'Nur GET-Anfragen sind erlaubt.'
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
}
 
$data = $_SESSION['Formularmailer-Data'] ?? null;
 
if ($data === null)
{
    http_response_code(404);
    echo json_encode([
        'success' => false,
        'data' => null,
        'message' => 'Keine Formulardaten in dieser Sitzung vorhanden.'
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
}
 
$payload = json_encode([
    'success' => true,
    'data' => $data
], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
 
if ($payload === false)
{
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'Fehler bei der JSON-Kodierung.'
    ], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
}
 
echo $payload;
exit;

JSON-Antwort bei Erfolg:

{
    "success": true,
    "data": {
        "vorname": "Maria",
        "nachname": "Musterfrau",
        "email": "maria@example.de",
        "workshops": ["Grundlagen der Hundeerziehung", "Erste Hilfe am Hund"],
        "bemerkung": "Ich freue mich auf die Veranstaltung"
    }
}

JSON-Antwort bei fehlenden Daten:

{
    "success": false,
    "data": null,
    "message": "Keine Formulardaten in dieser Sitzung vorhanden."
}

Kombination mit E-Mail-Templates

Die Formulardaten können in E-Mail-Templates verwendet werden. Auf der Bestätigungsseite haben Sie Zugriff auf die gleichen Daten und können diese entsprechend anpassen.

Wichtige Hinweise

Fehlerbehebung

ProblemLösung
„Keine Formulardaten in dieser Sitzung vorhanden“Stellen Sie sicher, dass das Formular korrekt übermittelt wurde und die Weiterleitung funktioniert hat. Überprüfen Sie, ob Cookies aktiviert sind.
Daten werden nicht angezeigtÖffnen Sie die Browser-Konsole (F12) und prüfen Sie auf JavaScript-Fehler. Stellen Sie sicher, dass die API-Datei erreichbar ist.
Array-Werte werden nicht korrekt angezeigtPrüfen Sie, ob der Feldname mit [] endet (z. B. workshops[]) und ob die JavaScript-Auswertung Arrays korrekt verarbeitet.
Umlaute werden falsch dargestelltStellen Sie sicher, dass alle Dateien in UTF-8 codiert sind und die entsprechenden Meta-Tags gesetzt sind.

Siehe auch