Manchmal müssen wir das Formular in mehrere Teile (Seiten) aufteilen, diese getrennt verarbeiten und dann zu einem Ergebnis zusammenfügen.
Dieser Artikel beschreibt Methoden und Entwurfsmuster, um dies zu erreichen.
Anmerkung:
Die Aufteilung eines Formulars in mehrere Schritte ist sehr komplex, besonders wenn man es gut machen will. Ich habe in meinem Leben viele Ansätze kennengelernt, die ich hier erörtern werde. Einige Ansätze sehen verlockend aus, sind aber naiv und funktionieren nur in bestimmten Fällen. Ich beschreibe für jeden Ansatz, wann er sinnvoll ist und welche Ansätze nicht sinnvoll sind.
Normalerweise besteht das Ziel darin, die grundlegenden Daten aus dem ersten Formular auf der ersten Seite zu erhalten, sie zu validieren, sie dann "irgendwo" zu speichern und die nächste Seite anzuzeigen.
Wenn der Benutzer zur letzten Seite gelangt, muss das gesamte Formular abgeschickt und die Eingaben verarbeitet werden.
Bei jedem Schritt ist es wichtig, alle Daten sorgfältig zu überprüfen und dem Benutzer die Möglichkeit zu geben, die Seiten nach Belieben zurückzuspringen, damit er die Daten korrigieren kann, wenn er auf einen Fehler stößt. Wenn das Formular außerdem auf der Grundlage der bereits erhaltenen Daten bedingt gerendert werden soll, ist dies ein sehr anspruchsvoller Prozess.
Wir können die einzelnen Formulare entweder selbst in reinem HTML implementieren und dann die Verarbeitung in PHP übernehmen oder fertige Lösungen wie Nette forms verwenden.
Beispiel aus dem Leben:
Sehr oft schicken mir unerfahrene Programmierer eine E-Mail und stellen scheinbar einfache Fragen, für die es eine fertige Lösung gibt. Zum Beispiel speziell zur Formularverarbeitung in PHP.
Ich empfehle immer, auf eine manuelle Bearbeitung zu verzichten und stattdessen eine vorgefertigte Lösung zu verwenden. In der Realität ist es sehr kompliziert, z. B. die Validierung der eingegebenen E-Mail und die Übereinstimmung von zwei Passwörtern in zwei Feldern korrekt zu implementieren, während wir den Benutzer entsprechend seinen Daten und mit Fehlermeldungen im Falle eines Fehlers zum vorausgefüllten Formular zurückleiten wollen.
Weil die Leute nicht wissen, dass sie nicht wissen, dass sie nicht wissen, und statt eine Stunde Zeit zu investieren, um eine fertige Lösung für 99,99 % der Probleme zu lernen, ziehen sie es vor, ihre eigene Lösung zu wählen, für die sie Dutzende von Stunden mit der Fehlersuche verbringen, und es gibt immer noch Fälle, in denen Formulare nicht funktionieren, Fehler auslösen, Sicherheitslücken haben und die eingegebenen Daten nicht schützen.
Das Ziel dieses Schrittes ist es also, mehrere Seiten unter verschiedenen URLs zu implementieren, die leere Formulare enthalten werden.
Ich empfehle, jedes Formular unabhängig von den anderen (atomar) zu implementieren und die Zustandsübergabe in einer anderen Anwendungsschicht zu behandeln. Der Grund dafür ist, dass jedes Formular in der Praxis die Datenvalidierung anders handhabt, seine Ausgaben anders schreibt, Fehler anders behandelt und wir es wahrscheinlich im Laufe der Zeit erweitern oder ändern wollen, so dass wir den Kontext des gesamten Prozesses nicht kennen und dafür Dutzende von Seiten ändern müssen.
Bei der Verarbeitung des ersten Formulars wollen wir zunächst die empfangenen Daten überprüfen und, wenn sie korrekt sind, den Benutzer zum zweiten Schritt weiterleiten. Es ist eine gute Idee, die Weiterleitung als HTTP-Weiterleitung zu handhaben, da es leicht passieren kann, dass die Daten nicht gültig sind. In diesem Fall wollen wir den Benutzer zum ersten Formular zurückbringen und nicht zum nächsten Schritt.
Wir können Zustände grundsätzlich auf 4 Arten speichern:
Nicht empfohlen:
Empfohlen:
Keine dieser Lösungen ist perfekt oder die einzig richtige. Ich selbst kombiniere mehrere Ansätze, wenn ich an mehrstufigen Lösungen arbeite. Typischerweise löse ich z.B. einen Warenkorb als Datenbanktabelle, der ich die bereits gesammelten Daten zuordne und sie entweder an einen Benutzer (wenn er eingeloggt ist) oder an eine Sitzung (wenn er nicht eingeloggt ist und wir uns noch nicht kennen) binde.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | de