Werner: Fehler in Formularen

Beitrag lesen

Hallo,

ich habe eine kleine Webapplikation, in der umfangreiche vom Besucher einzugebende Daten in eine Datenbank geschrieben werden. Die Formularskripte lesen jeweils die Werte aus den Datenbanken aus und geben sie in den Eingabefeldern aus. Nach Absenden eines Formulars werden die neuen Eingaben in die Datenbank geschrieben und sodann wieder der Teil durchlaufen, der schon anfangs die Daten aus der Datenbank ausgelesen hat, und die aktualisierten Daten ausgegeben.

Soweit funktioniert das gut, solange die neuen Eingaben korrekt sind. Treten Fehler auf, funktioniert das Verfahren nicht mehr, wenn die fehlerhaften Daten ausgegeben werden sollen. Im Moment habe ich es (vorläufig) so gemacht, daß geprüft wird, ob die Eingaben richtig sind. Ist nur eine Eingabe falsch, werden der gesamte Request zurückgewiesen, also nichts in die Datenbank geschrieben, und die alten Daten aus der Datenbank ausgegeben.

Das ist natürlich noch nicht das, wie es im Endeffekt einmal sein soll. Ich habe das vorläufig nur so, weil ich noch nicht weiß, was der Endzustand sein soll. Ich habe folgende Möglichkeit ins Auge gefaßt, die ich so auch mal in einem CMS verwirklicht hatte:

1. Prüfung, ob Benutzereingaben korrekt sind.

2. Ja => Daten in Datenbank schreiben und entweder (neue) Daten noch einmal aus Datenbank auslesen und ausgeben (= unnötige Belastung der Datenbank), oder Unterscheidung, ob Formular erstmals aufgerufen, dann Daten aus Datenbank auslesen und ausgeben, sonst Requestdaten ausgeben. Nein => Fehlermeldung, was falsch ist, und fehlerhafte Requestdaten in die Eingabefelder schreiben.

3. Für den Fall falscher Benutzereingaben: In den Eingabefeldern stehen die falschen Benutzereingaben. Sie wurden nicht in der Datenbank gespeichert. Deswegen ein Button, der "resettet", indem die in der Datenbank gespeicherten gültigen Werte ausgelesen und ausgegeben werden.

Fragen:

1. Was haltet Ihr von diesem Verfahren?
2. Sollte ich alle Fehlermeldungen am Kopf des Formulars ausgeben oder eher bei jedem einzelnen Eingabefeld, worin fehlerhafte Daten sind, was ich besser finde? Wie kann man das zweite am besten realisieren, ohne bei jedem Eingabefeld eine IF-Abfrage formulieren zu müssen? Im Moment ist im Kopf der Skripte der PHP-Teil, der dann abgeschlossen wird und in reine HTML-Ausgaben mündet, die nur von den Datenbankausgaben durchbrochen werden, was so aussieht:

<?php Prüfungen usw. ?>

...

<input type="text" name="plz" value="<?= $datensatz["plz"]?>">
<input type="text" name="ort" value="<?= $datensatz["ort"]?>">

Wenn ein Fehler auftritt und dies beim zugehörigen Feld ausgegeben werden soll

z. B. so

<input type="text" name="plz" value="abc" class="fehler"> Sie haben eine ungültige PLZ eingegeben. Diese muß numerisch sein.

gefällt mir diese (vereinfachte) Variante

<input type="text" name="plz" value="?= $datensatz["plz"] oder $_POST[="plz"]?>" <?php if ($fehler=="...") echo 'class="fehler"'?>><?php if ($fehler=="...") echo 'Sie haben eine ungültige PLZ eingegeben. Diese muß numerisch sein.'?>

nicht allzu gut, weil das kaum noch zu lesen ist.

Besser wäre meines Erachtens sowas

<input type="text" name="plz" value="?= $datensatz["plz"] oder $_POST[="plz"]?>{FEHLERKLASSE}>{FEHLERMELDUNG}

Doch wie realisiere ich das am besten? Die HTML-Ausgaben in einem String sammeln und mittels regulärer Ausdrücke {FEHLERKLASSE} und {FEHLERMELDUNG} ersetzen? Kann ich nicht auch in einem reinem HTML-Teil, die Platzhalter ersetzen?