Verschiedene Aktionen nach Form-Submit

Das worüber ich heute schreibe, ist weder neu, noch sonderlich aufregend, aber dennoch oftmals hilfreich. Es geht darum, über mehrere Submit-Buttons die Aktion nach dem Absenden eines HTML-Formulares steuern zu können.

Angenommen, über ein Formular sollen die Stammdaten von Kunden bearbeitet werden und wir wollen dem Bearbeiter das Leben etwas leichter machen, indem er nach dem Speichern der Daten direkt die nächste Aktion ausführen kann ohne sie in der Navigation zu suchen.

In unserem Fall könnten die Aktionen z.B. ‘speichern’, ‘speichern und zur Liste’ und ‘speichern und neu anlegen’ sein.

Erstmal brauchen wir ein gewöhnliches Affenformular mit den gewünschten Eingabefeldern:

<form action="machwas" method="post">
  // ein paar Felder
  <input type="submit" value="speichern">
</form>

Soweit, so gut. Bislang ein ganz gewöhnliches Formular. Doch wie steuern wir denn nun was nach dem Absenden passieren soll? Ganz einfach, wir geben dem Formular noch ein paar Buttons und benennen diese.

<form action="machwas" method="post">
  // ein paar Felder
  <input type="submit" value="speichern" name="btnSave">
  <input type="submit" value="speichern und zur Liste" name="btnSaveList">
  <input type="submit" value="speichern und neu anlegen" name="btnSaveNew">
</form>

Für diesen Zweck habe ich mir angewöhnt, den Namen das Prefix ‘btn’ zu geben, damit sie besser zuordenbar sind.

Was passiert nun? Durch die Benennung der Buttons wird deren Wert (value) mit den andere Werten übertragen und wir können serverseitig damit arbeiten.

Theoretisch hätte ich auch alle Buttons gleich benennen können und hätte dann mit dem jeweiligen Wert weiter arbeiten können, aber dieser wäre nicht zuverlässig nutzbar. Dazu etwas später mehr.

Natürlich brauchen wir auch noch eine Auswertung für unser Formular:

<?php
// Daten prüfen, speichern und weiterleiten, wenn alles geklappt hat...

if(isset($_REQUEST['btnSave'])) {
  // ...und wieder auf das Formular weiterleiten (mit Daten anzeigen)
} else if(isset($_REQUEST['btnSaveList'])) {
  // ...und zur Liste weiterleiten
} else if(isset($_REQUEST['btnSaveNew'])) {
  // ...und wieder auf das Formular weiterleiten (ohne Daten anzeigen)
}

Das Beispiel funktioniert auch mit anderen Sprachen, müsste dann aber natürlich an die Syntax angepasst werden. Persönlich finde ich nach einem POST-Request einen HTTP-Redirect ganz nützlich.

Nun noch kurz die Aufklärung, warum ich die Namen der Buttons auswerte. Es ist einfacher, da der Name sich in der Regel nicht verändert, jedoch evtl. die Beschriftung und somit der Wert, wenn die Anwendung mehrsprachig programmiert ist.

Ich hoffe, dass es vielleicht dem Einen oder Anderen hilft, auch wenn es eigentlich zu den Basics gehört. Viel Spaß beim Ausprobieren!

Kommentare sind deaktiviert.

Schlagwörter: Adapter, Amazon, Animation, Annotations, Anonyme Klasse, Ant, Apache, API, Array, ArrayAccess, Attachment, AutoLoader, Bedienung, Bedingung, Benchmark, Bildbearbeitung, BOM, Bootstrap, Bot, Byte Order Mark, Callback, CamelCase, Canvas, Captcha, Cheatsheet, CLI, Closure, Cloud, CodeSniffer, Community, Comparator, Contest, Controller, Converter, CouchDB, Countable, Cronjob, CSV, CustomLibrary, Custom_Model, Data Mapper, Datei, Datenbank, Datenstruktur, Datentypen, Dating, Decorator, Dekorierer, Design Patterns, Dump, Duplikat, each, Eclipse, Entwicklung, Entwurfsmuster, Enum, Erweiterung, Eventhandling, Exception-Handling, Extension, Factory, Fehler, Flash, Foreach, Formatierung, Formular, Funktion, Futon, Header, HTML5, HTTP, IDE, If, Implementierung, InnoDB, Interceptor, Interface, isset, Iterator, Java, JavaScript, jQuery, Konfiguration, Konsole, Kontrollstruktur, kopieren, Late Static Binding, Layout, Linux, Listeners, Logging, Löschen, Magento, Magic Methods, Marketing, Methode, Model, MVC, MySQL, NetBeans, Objekt, Observable, Observer, OOP, Operator, Parameter, Partnersuche, Performance, PHP, phpMyAdmin, PHPUnit, Plugin, Proxy, Qualitätssicherung, Query, Reflection, Request, Response, Rest-API, Rockstar, Routing, S3, Samba, Scheifen, Schleife, Schutz, Secure Shell, Selbstreferenz, Shop, Sicherheit, Sicherung, Singleton Pattern, SOAP, Sortierung, Sourcecode, Spam, Speicherproblem, Spickzettel, SPL, SSH, Statement, Stellvertreter, Strategy Pattern, Stream, String, Sun VirtualBox, Support, Switch, Symfony, Symfony2, Symfony Live, Tag, Template, Template Method, Ternär Operator, Testing, Thumbnail, Tool, Tour, Twig, Type-Cast, Umwandlung, Underscore, unset, Vererbung, Verzweigung, Video, Videospiel, Virtualisierung, Visitor Pattern, Vorschaubild, walk, Webserver, Webservice, Weiterleitung, Wrapper, Youtube, Zeitsteuerung, Zend Framework, Zend_Cloud, Zend_CodeGenerator, Zend_Http_Client, Zend_Service, Zugriffsmethode