Tach!
Du hast Die Daten optimal in einem Array:
Optimal für deinen Lösungsvorschlag zumindest. Objekte tun es aber auch.
Dann könnte die Funktion zum Ausgeben des Formulars die fehlenden Formulardaten durch passende leere Werte ersetzen und danach das Forular mit - je nach Kontext (HTML, Input, Textarea/Button, Javascript) oder Inhalt ( → siehe
intval()
) entschärften(sic!) Daten ausgeben.function writeForm ( $caption, $arrFormdata = false ) { if ( ! is_array( $arrFormdata ) ) { foreach ( [ 'id', 'foo', 'bar', 'tok', 'baz', 'gret' ] as $i ) { $arrFormdata[ $i ] = ''; } }
Mit der Schleife beschränkst du die Werte auf Leerstrings. Andere Defaultwerten, die für den Anwendungsfall eventuell auch sinnvoll sein können, sind damit nicht möglich. Man könnte die Funktion nun noch erweitern, so dass andere Defaultwerte übergeben werden. Das wird aber nur unnötig komplex.
Zudem verlagert man die fachliche Prüfung vom Verarbeitungsteil in den Ausgabeteil. Das Beschaffen und Erzeugen der auszugebenden Werte sollte vor der Ausgabe stattfinden.
Einfacher ist es, auf den Test ganz zu verzichten und stattdessen ein fertiges Array (in deinem Fall - oder auch ein Objekt) zu übergeben, das entweder Datenbankinhalte oder Defaultwerte enthält.
Man kann übrigens auch Template-Systeme benutzen. Verbreitet ist z.B. Smarty.
Die nehmen einem aber diese Arbeit nicht ab. Es kommt noch ein weiteres System dazu, dass man erlernen und beherrschen muss. Kann vorteilig in bestimmten Fällen sein, muss aber nicht. Und sie erfordern eine striktere Trennung zwischen Datenverarbeitung und Ausgabe. Defaultwerteprüfungen in Template-Engine-Syntax zu schreiben, erhöht nur die Komplexität, die man eigentlich mit der simplifizierten Template-Engine-Syntax zu verringern versucht.
dedlfix.