diff --git a/app/index.php b/app/index.php index a78c2f4..6e899df 100644 --- a/app/index.php +++ b/app/index.php @@ -34,12 +34,12 @@ $validActions = ['list', 'edit', 'save', 'ports', 'delete']; // Prüfen auf gültige Werte if (!in_array($module, $validModules)) { - // TODO: Fehlerseite anzeigen + // TODO: Fehlerseite anzeigen, nutze renderClientError(...) die('Ungültiges Modul'); } if (!in_array($action, $validActions)) { - // TODO: Fehlerseite anzeigen + // TODO: Fehlerseite anzeigen, nutze renderClientError(...) die('Ungültige Aktion'); } @@ -58,7 +58,7 @@ $modulePath = __DIR__ . "/modules/$module/$action.php"; if (file_exists($modulePath)) { require_once $modulePath; } else { - // TODO: Fehlerseite oder 404 + // TODO: Fehlerseite oder 404, nutze renderClientError(...) if ($action !== 'save') { echo "
Die Seite existiert noch nicht.
".$modulePath; } diff --git a/app/lib/helpers.php b/app/lib/helpers.php index a1718d8..9746082 100644 --- a/app/lib/helpers.php +++ b/app/lib/helpers.php @@ -206,6 +206,93 @@ function dd($value): void exit; } +/** + * Zeigt eine sauber gestaltete Fehlerseite für 40x-Status-Codes mit Erklärung. + * + * @param int $statusCode Client-Error-Status (400–499) + * @param string $explanation Optionale Zusatzinfo zur Problemursache + * @param string[] $tips Handlungsvorschläge für Benutzer (optional) + */ +function renderClientError(int $statusCode, string $explanation = '', array $tips = []): void +{ + if ($statusCode < 400 || $statusCode >= 500) { + $statusCode = 400; + } + + $reasons = [ + 400 => 'Ungültige Anfrage', + 401 => 'Nicht authentifiziert', + 403 => 'Zugriff verweigert', + 404 => 'Seite nicht gefunden', + 405 => 'Methode nicht erlaubt', + 408 => 'Anfrage abgelaufen', + 429 => 'Zu viele Anfragen', + ]; + + $reason = $reasons[$statusCode] ?? 'Clientseitiger Fehler'; + $defaultExplanation = match ($statusCode) { + 400 => 'Die Anfrage konnte aufgrund fehlender oder falscher Daten nicht verstanden werden.', + 401 => 'Bitte melden Sie sich an oder verwenden gültige Zugangsdaten.', + 403 => 'Sie besitzen keinen Zugriff auf diesen Bereich.', + 404 => 'Die angeforderte Ressource existiert nicht oder wurde verschoben.', + 405 => 'Diese Aktion ist auf dem Server nicht erlaubt.', + 408 => 'Die Anfrage hat zu lange gedauert; bitte erneut versuchen.', + 429 => 'Sie senden zu viele Anfragen in kurzer Zeit.', + default => 'Die Anfrage kann nicht verarbeitet werden; überprüfen Sie die Eingaben.', + }; + + $message = $explanation !== '' ? $explanation : $defaultExplanation; + + http_response_code($statusCode); + + $css = <<{{message}}
+ {{tips}} +Zurück zur Startseite: Dashboard
+