htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8'); $stage = (string)($_POST['stage'] ?? 'form'); $values = [ 'requester_name' => trim((string)($_POST['requester_name'] ?? '')), 'requester_email' => trim((string)($_POST['requester_email'] ?? '')), 'contract_reference' => strtolower(trim((string)($_POST['contract_reference'] ?? ''))), 'request_reason' => trim((string)($_POST['request_reason'] ?? '')), ]; $errors = []; $stored = null; $processing = null; $mailStatus = null; if ($_SERVER['REQUEST_METHOD'] === 'POST') { app_require_csrf(); if ($stage === 'form') { // Die Werte aus der Prüfseite werden wieder im Formular angezeigt. } else { $errors = app_validate_legal_request($values, 'withdrawal'); } if ($stage !== 'form' && $errors !== []) { $stage = 'form'; } elseif ($stage === 'submit') { if (!app_rate_limit_check($pdo, 'legal_request_ip:' . app_client_ip(), 5, 3600)) { $errors[] = 'Zu viele Erklärungen von diesem Anschluss. Bitte nutze alternativ E-Mail oder das Ticketsystem.'; $stage = 'form'; } else { $input = $values + ['request_type' => 'withdrawal']; $stored = app_store_legal_request($pdo, $input); $processing = app_process_withdrawal_request($pdo, $stored); $mailStatus = app_send_legal_request_confirmations($input, $stored, $processing); $stage = 'complete'; } } elseif ($stage !== 'form') { $stage = 'review'; } } ?> Vertrag widerrufen – Kaffeeliste