PHP-Code in validierung_OOP/02_step/required_fields.php
<?php
if (isset($_POST['go'])) {
require("class/ValidationRequired.class.php");
$superhero = new ValidationRequired();
$valVorname = $superhero -> isEmpty("Vorname", $_POST['Vorname']);
$valNachname = $superhero -> isTooShort("Nachname", $_POST['Nachname']);
// Sind Probleme aufgetreten?
if ($superhero -> hasErrors) {
$feedback = "<div class=\"feedback_negative\">";
$feedback .= "Das Validieren ist fehlgeschlagen. Folgende Fehler sind aufgetreten:<br>";
foreach ($superhero -> errorsArr as $error) {
$feedback .= $error."<br>";
}
$feedback .= "</div>\n";
}
else {
$feedback = "<div class=\"feedback_positive\">";
$feedback .= "Alle Felder sind korrekt ausgefüllt.";
$feedback .= "</div>\n";
}
}
else {
$feedback = "<div class=\"feedback_negative\">";
$feedback .= "Das Formular wurde noch nicht verschickt. Klicke den Submit-Button!";
$feedback .= "</div>\n";
$valVorname = "";
$valNachname = "";
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Required Fields</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed&family=Roboto:ital,wght@0,400;0,500;1,400&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/styles.css">
<link rel="stylesheet" href="/css/formstyles.css">
</head>
<body>
<div id="container">
<h1>Required Fields - Zwei Ansätze</h1>
<p>Grundsätzlich gibt es zwei Wege, die Werte von obligatorischen Feldern zu überprüfen:</p>
<ol>
<li>Ist die verschickte Variable <strong>leer oder nicht</strong>? (PHP-Handbuch <a href="https://www.php.net/manual/de/function.empty.php"><code>empty</code></a>)<br>
Vorteil: Einfach zu programmieren.<br>
Nachteil: Gewiefte User umgehen dies easy. Sie setzen irgend ein Zeichen in das Feld, wenn sie zu faul sind, das Formular exakt auszufüllen.</li>
<li>Hat die verschickte Variable eine <strong>minimale Länge</strong>? (PHP-Handbuch <a href="https://www.php.net/manual/de/function.strlen.php"><code>strlen</code></a>)<br>
Vorteil: Kann besser überprüfen, ob die Eingabe den Anforderungen entspricht.<br>
Nachteil: Aufwändiger zu programmieren
</ol>
<p>Mache es für den User deutlich, welche Felder des Formulars obligatorisch auszufüllen sind, sonst wird der Validierungsprozess frustrierend für ihn. Ein häufig eingesetzte Methode ist es, im Label einen Stern (*) hinzuzufügen.</p>
<p style="margin-bottom: 3px;">Wenn du die minimale Länge überprüfst, musst du dir bewusst sein, dass unerwartete Edge-Cases eintreten können:
<ul>
<li>In der Schweiz gibt es die Orte Gy und Lü.</li>
<li>Es gibt tatsächlich Familiennamen wie O und B. Ich selber kenne einen jungen Mann mit Familienname O. Er kann online kein Flugticket kaufen. In den meisten Webshops gibt er den (falschen) Nachnamen "Ohh" an und hofft, dass der der Pöstler das auflösen kann mit dem (richtigen) Namen auf dem Briefkasten.</li>
<li>Es gibt in der Schweiz Adressen in Bergdörfern, die keine Strassen beinhalten.</li>
<li>Es gibt Adressen mit Strassen, die keine Hausnummern haben.</li>
</p>
<!-- Ausgabe des Feedbacks -->
<?=$feedback?>
<form action="" method="post">
<div class="form_control">
<label for="Vorname">Vorname*</label>
<input type="text" name="Vorname" id="Vorname" value="<?=$valVorname?>">
</div>
<div class="form_control">
<label for="Nachname">Nachname*</label>
<input type="text" name="Nachname" id="Nachname" value="<?=$valNachname?>">
</div>
<div class="form_control">
<button type="submit" name="go" class="btn btn-blue">Verschicken</button>
</div>
</form>
</div>
</body>
</html>