Rolf b: login.php input leeren nach zweitem submit (error)

Beitrag lesen

Ich empfehle immer, Code und Markup zu trennen. Ob Du nun den Code in register.php hast und dir per include ein register_form.php hineinziehst, oder das Markup in register.php steht und du ein register_code.php hereinholst, ist eigentlich wurscht. Persönlich finde ich die Lösung mit Code in register.php charmanter und auch verständlicher.

Da kannst Du dann nämlich alles, was für die Darstellung relevant ist, im Speicher aufbereiten und greifst im register_form.php darauf zu. Als Ablage für diese Aufbereitung nimmt man gerne ein assoziatives Array oder ein Objekt, unter Kennern ist der der Name für diese Ablage "ViewModel" - also das Datenmodell, dass der gewünschte View (die HTML-Seite) benötigt.

Wenn Du verhindern willst, dass jemand von außen dein Ausgabemodul direkt aufruft, kannst Du das mit .htaccess lösen - oder du fragst im Ausgabemodul zu Beginn ab ob die Variable mit dem ViewModel existiert, und wenn nicht, gibst Du einfach nur "Hallo Hacker!" aus und beendest das Script.

Auf diese Weise wird deine Logik viel übersichtlicher. Vor allem - und dies ist die Antwort auf deine Frage - steht es Dir frei, im Falle einer erfolgreichen Registrierung die ViewModel-Felder für Vorname, Nachname und Datum einfach zu leeren. Es werden vielleicht ein paar Zeilen Code mehr. Aber du kannst sie wenigstens lesen und tust deinem 3 Monate älteren Selbst den Gefallen, das Ganze auch noch zu verstehen.

Muster für das Logikmodul ist, seit John von Neumann selig (und vermutlich auch Konrad Zuse und Charles Babbage), die gute alte EVA:

E - Eingabe

Auslesen der Daten aus dem POST-Array, ggf. säubern (stripslashes/trim), und speichern in Variablen. Rufe nicht ständig - beispielsweise - stripslashes(trim($_POST['pw'])) auf. Gönn Dir eine Variable für das Ergebnis, striptrimme 1x und arbeite ab dann mit dem Variablenwert.

V - Verarbeitung

Plausibilitätsprüfungen
Entscheiden ob registriert wird
Ggf. Registrierung durchführen
Fehlermeldungen aufbereiten -> Ins ViewModel stellen
Neue anzuzeigende Feldinhalte aufbereiten -> Ins ViewModel stellen

A - Ausgabe

Laden des Ausgabe-Moduls (mit include). Die PHP Doku sagt dazu, dass ein includetes PHP die gleichen Variablen sieht wie die Codezeile, an der das Include steht. Wenn Du Dir also eine selbstdisziplinierende Maßnahme gönnen willst, schreibst Du in dein Codemodul ein Funktion

function ausgeben($template, $VM)
{
   include $template;
}

Die rufst Du zum Durchführen der Ausgabe auf (Parameter sind wohl offensichtlich) und dein Ausgabemodul sieht nichts außer den Variablen $template und $VM.

Das Ausgabemodul ist letztlich deine HTML-Seite mit möglichst wenig PHP-Code darin. Statt <?php echo ... ?> würde ich übrigens <?= ... ?> empfehlen (Short Echo Tag), das ist kompakter.

Rolf