Mehrere Submit Button mit einem Formular auswerten

Serverseitig wird ausgewertet, welcher Submit-Button geklickt wurde

Hinweis: Verwende Zahlen mit Punkt als Dezimaltrenner

Zwei Zahlen a, b: Ergebnis: steht noch nicht fest
Rechenart:

Seite neu Laden

Über diese Anwendung

Komplexe Aufgabenstellungen erfordern Lösungen mit denen heutige Programmierer oftmals überfordert sind, weil sie die Grundlagen nicht kennen oder zu bestimmten Abstraktionen nicht fähig sind. So z.B. läuft es darauf hinaus, dass die Frage "Welcher Button wurde geklickt" abstrakt gesehen gleichbedeutend mit der Frage ist. "Welcher Link" von einem Benutzer angeklickt wurde. Der richtige Umgang mit Schlüsselparametern und dafür entworfenen Parameter-Kontrollstrukturen gehört zu programmiertechnischen Fertigkeiten der "Alten Schule", was heutzutage leider nirgendwo mehr vermittelt wird. Genau das schauen wir uns nun etwas genauer an.

Schlüsselparameter

In dieser Anwendung lauten sie: plus, minus, mal, durch. Der jeweilige Wert zu einem Schlüsselparameter hat lediglich eine bool'sche Bedeutung, es ist also egal, ob dafür eine 1 oder die Beschriftung einer Schaltfläche übertragen wird.

In der Parameterliste sieht das beispielsweise so aus:

    minus=1
        oder
    plus=1
        oder
    mal=1
        oder
    durch=1

Wobei ein Schlüsselparameter deswegen Schlüsselparameter heißt, weil allein sein Vorhandensein in der Parameterliste den serverseitigen Ablauf innerhalb einer Anwendung steuert. Unerheblich und unabhängig davon, ob die Request-Method GET oder POST ist. In einer weiteren Abstraktion stellen wir fest, dass es auch egal ist, ob der Parameter in einem href="?plus=1" notiert wurde, oder ob es einen Submit-Button mit name="plus" value="1" gibt.

Gut jedoch zu wissen, dass im letzteren Fall der Browser sicherstellt, dass nur von demjenigen Button name/value übertragen werden, welcher auch tatsächlich geklickt wurde, d.h. also, dass name/value der jeweils anderen Buttons eben nicht in der Parameterliste erscheinen.

Parameter-Kontrollstruktur

Die liegt serverseitig und sieht bspw. so aus:

    if( param('minus') )   {}
    elsif( param('plus') ) {}
    elsif( param('mal') )  {}
    elsif( param('durch') ){}
    else{
        # unbekannter Parameter
    }

Mit dieser einfachen Kontrollstruktur wird JEDER mögliche Fall erfasst, wichtig ist auch, dass der Fall "Unbekannter oder nicht erwarteter Parameter" mit einer entsprechenden Meldung an den Benutzer kommuniziert wird.

Natürlich braucht das Programm in den unterschiedlichen Zweigen auch weitere Parameter. In unserem Beispiel sind das die zwei Zahlen, welche der Benutzer eingegeben hat. Die komplette Parameterliste sieht also so aus:

    plus=1;a=6.0;b=2.0

Womit serverseitig beide Zahlen (a, b) addiert werden und das Ergebnis ins Template gerendert wird. Schließlich darf auch eine dem Zweck entsprechende Fehlerbehandlung nicht fehlen, für obenstehendes Formular ist eine Solche eingebaut.

AJAX

Gleichgültig ob der Request vom Formular ausgehend via Browser übermittelt oder ob ein Link geklickt wurde oder ein XML-HTTP-Request erfolgte, stets wird die Parameterliste immer gleichermaßen aussehen. An der serverseitigen Parameter-Kontrollstruktur ändert sich nichts, lediglich die Response fällt anders aus.

Bliebe noch die Frage, was der Browser macht, wenn ein Submit infolge Drücken der Enter-Taste in einem Inputfeld erfolgte. Hier ist die Antwort: Der Browser sendet vom ersten Button mit type="submit" das name/value-Paar als Parameter im Request.

Für eine Übertragung der Daten mit AJAX muss es eine Funktion geben, welche das Formular serialisiert: Aus den Eingaben des Benutzers wird eine Liste mit Parametern erzeugt. Zur freien Verfügung stehen beispielsweise jQuery.serialize() und FormData. Letzeres ist von Interesse, wenn Uploads gemacht werden sollen.

Beachten Sie, dass sich die hier genannten JS-Libraries nicht so verhalten wie ein Browser. Sie müssen sich also selbst darum kümmern, dass name/value in die Parameterliste aufgenommen wird von demjenigen Button, der geklickt wurde.


Anbieter: nmq​rstx-18­@yahoo.de, die Seite verwendet funktionsbedingt einen Session-Cookie und ist Bestandteil meines nach modernen Aspekten in Perl entwickelten Frameworks.