dedlfix: PHP-Aufbau Formular

Beitrag lesen

echo $begrüßung;

Eigentlich soll die check.php folgendes machen (Affenformular):
-ein leeres Formular laden
-auf korrekte eingaben prüfen
  bei korrekter Eingabe die Daten in DB schreiben und eine andere Seite laden
  bei fehlerhafter Eingabe das Formular laden, die Fehler rot markieren und die eingegebene Daten im Formular anzeigen
Der submit-button des Formulars (formular.txt) ruft die check.php auf.

Mir ist nicht ganz klar wo das Problem bei der check.php und dem Vermischen von Eingabe, Verarbeitung und Ausgabe liegt.

Der verarbeitende Teil trägt alle Informationen zusammen, die für eine Ausgabe benötigt werden, gibt sie aber nicht aus. Das betrifft auch Fehlermeldungen, die an den Anwender ausgegeben werden sollen. (Meldungen, die interne Logfiles geschrieben werden sollen, können gleich dorthin ausgegeben werden.) Erst wenn alle Daten ermittelt wurden, kommt die Ausgabe zum Zuge. Dieser Programmteil greift nun auf die bereitgestellten Variablen mit den einzufügenden Texten zu und arbeitet sie an den passenden Stellen im Template ein.

Zur Formularauswertung benötigt man nur das $_POST-Array. Der HTML-Code vom Formular ist dabei unwichtig. Er muss deshalb an der Stelle nicht geladen sein.

Solch eine Trennung ist vorteilhaft, weil man sich damit die möglichen Wege durch eine bereits erfolgte teilweise Ausgabe nicht verbaut. Wenn das Formular erfolgreich abgearbeitet wurde, ist es vielleicht erforderlich, auf eine andere Seite weiterzuleiten, damit der Zurückblättern-und-"POST-Daten-noch-mal-senden?"-Effekt nicht auftritt. Eine vorherige Ausgabe stört dabei und das Formular wurde in dem Fall auch umsonst geladen. Will man diese Weiterleitung später noch einbauen ist das nicht ohne größere Umbauarbeiten möglich oder zumindest schwierig. Alternativ könnte man die Ausgabe puffern, was dann aber auch umsonst war, wenn man ohne Ausgabe weiterleitet.

Guter Hinweis, doch ich würde eine sinnvolle Umstrukturierung bevorzugen. Ich möchte nicht nur dieses Problem "schnell" lösen, sondern lernen welche sinnvolle Strukturmöglichkeit es gibt, die auf möglichst viele Projekte anwendbar ist.

Das, denke ich, ist eine gute Entscheidung.

Vermutlich ist es vom jeweiligen Vorhaben abhängig, doch vielleicht gibt es ja eine Art "best-practise" oder eine geeignete Grundstruktur die ich mir verinnerlichen kann. Hab bisher leider kein passendes deutschsprachiges Tutorial finden können das mir weitergeholfen hat.

Vielleicht hilft dir schon meine Vorgehensweise bei auszugebenden Fehlermeldungen weiter. Ein Formularelement hat ja einen Namen. Wenn bei der Eingabedatenprüfung ein Fehler festgestellt wurde, erstelle ich in einem Array $errors ein Element mit dem Formularelementnamen als Schlüssel. Dieses Element ist wiederum ein Array, das die einzelnen Fehlermeldungstexte enthält.

$errors = array(
    'element1' => array(
      'meldung 1',
      'meldung 2'),
    'element2' => array(
      'meldung 1'));

Im Ausgabeteil kann man nun entscheiden, ob man alle Meldungen an einer Stelle ausgeben will oder ob man sie in der Nähe des jeweils betroffenen Elements platziert. Im ersten Fall kann man über das Array und seine Unterarrays iterieren, im zweiten Fall prüft man bei der Ausgabe des jeweiligen Elements, ob im Fehlerarray etwas Passendes enthalten ist. Dazu kann man sich eine Helferfunktion schreiben, die über das Unterarray iteriert, damit dieser Code nicht mehrfach eingefügt werden muss. Und wenn $errors ganz leer war, kann man das Formular komplett ignorieren und die Weiterleitung ausführen.

echo "$verabschiedung $name";