tinita: input oder button für submit-Elemente?

Beitrag lesen

Das value-Feld auszuwerten hat einige praktische Vorteile gegenüber der Prüfung auf vorhandene Schlüssel:

Von mehreren Submit-Buttons kann immer nur einer betätigt werden.

Soweit klar.

Die Auswahl, die man trifft, ist also vergleichbar mit der Auswahl aus einer Gruppe Radiobuttons (sowie in Matthias' Beispiel) oder aus einer Selectbox. Bei diesen Eingabefeldern wird die getroffene Auswahl notwendiger Weise als Wert eines Schlüssel/Werte-Paares kodiert und nicht als diskrete Schlüssel. Wenn man den Fall „mehrere Submitbuttons“ analog zu „Auswahl aus einer Gruppe Radiobuttons“ und „Auswahl aus einer Select-Box“ behandelt, ergibt sich der Vorteil, dass die Fälle auch serverseitig gleich behandelt werden können. Ferner kann auf diese Weise der wechselseitige Ausschluss der Optionen schon bei der Übermittlung der Daten sichergestellt werden. Wenn man mehrere Submit-Buttons mit unterschiedlichen Namen auszeichnet ist das nicht möglich. Der Server müsste immer auch den Fall prüfen, was ist wenn zwei Optionen gesetzt sind, die eigentich nicht beide gleichzeitig aktiv sein sollten.

Hier hast du mich verloren.
Wenn der User einen Button anklickt, sollte nur einer am Server ankommen, ok.
Wird der Request beispielsweise von einem Skript abgeschickt oder manipuliert man sonst irgendwie die Parameter, kann man mehrere Submit-Buttons simulieren.
Das ist aber bei beiden Varianten möglich.
also action=Abbrechen&action=Speichen ist genauso möglich wie submit.cancel=1&submit.save=1

In jedem Fall muss geprüft werden. Bzw. der Server nimmt einfach einen von beiden.
Die zugehörigen Parameter müssen ja in jedem Fall geprüft werden.

Ich sehe da also keinerlei Unterschied.

Eine Auswertung des Wertes zu einem immer gleichen Schlüssel kann zudem in vielen Fällen generisch gestaltet sein. Sollte irgendwann ein dritter Submit-Button (oder eine dritte Radiobox) hinzukommen, muss kein serverseitiger Code geschrieben werden, der die Formulardaten auf einen neuen Schlüssel überprüft, evtl. muss sogar gar kein neuer Code geschrieben werden.

Verstehe ich auch nicht. Wenn ein neuer Submitbutton hinzukommt, ist der entweder nur zur
Deko oder er hat eine bestimmte Funktion.
In beiden Varianten kann ich ihn auswerten und muss dafür Code anpassen oder eben nicht.

Im übrigen: die Auswertung kann, wenn man ein hübsches Framework hat, z.B. so gestaltet werden:
Alle submit-Buttons haben das Prefix "submit.".
Der Framework-Code sammelt die Buttons beim Einlesen der Parameter.
Der eigentliche Code ruft nun nur noch auf:
if ($req->submit('save')) { ... }
Nix mehr mit
if ($req->param('action') eq 'Speichern') { ... }