In der Regel möchte man in einem Skript die Daten aus einem Formular auswerten. Ein einfaches Exemplar zeigt
Listing 2
. Die dortige HTML-Datei erstellt ein Formular, das den Vor- und Nachnamen seines Benutzers erfragt und diesen dann per Get-Methode an das Lua-Skript
»antwort.lua
«
schickt.
Listing 2
Datei frage.html mit einem Formular
Dessen Inhalt zeigt
Listing 3
. Zunächst setzt die
»handler()
«
-Funktion den MIME-Typ auf
»text/html
«
und baut dann mit mehreren
»r.puts()
«
den Anfang eines HTML-Dokuments zusammen. Anschließend muss sie an die Daten aus dem Formular gelangen. Dabei hilft wieder das Request-Objekt. Seine Methode
»r:parseargs()
«
liefert alle per Get-Methode gesendeten Parameter in einer sogenannten Tabelle zurück. Diese Datenstruktur kennen andere Programmiersprachen auch als assoziatives Array oder Dictionary.
Listing 3
Formularauswertung antwort.lua
Die von
»parseargs()
«
zurückgelieferte Tabelle besitzt für jedes Formularfeld einen Eintrag mit dem Namen des Feldes und dem darin abgelegten Wert. Um an den Vor- und Nachnamen zu kommen, durchläuft die folgende
»for
«
-Schleife die komplette Tabelle. Die
»pairs()
«
-Funktion hilft ihr dabei, indem Sie auf den jeweils nächsten Eintrag in der Tabelle zeigt. In der Variablen
»k
«
landet dabei der Name des Formularfeldes, in
»v
«
sein entsprechender Inhalt.
Die If-Abfrage prüft, ob es sich um den Vornamen handelt. Wenn ja, wandert er in die Variable
»vorname
«
. Analog speichert die Variable
»nachname
«
den Nachnamen. Variablen darf man in Lua einfach immer direkt benutzen und in ihnen zudem beliebige Werte abladen.
Lua-Kenner dürften an dieser Stelle einwenden, dass man sich die ganze Schleife auch sparen und etwa per:
alleparameter = r:parseargs(); vorname = alleparameter["vorname"]
direkt den Vornamen aus der Tabelle holen könnte. Dies führt jedoch zu einer Fehlermeldung, wenn der Vorname aus irgendeinem Grund gar nicht übertragen wurde.
Nachdem in
Listing 3
der Vorname und Nachname in ihren entsprechenden Variablen liegen, setzt sie die Funktion
»string.format()
«
zu einer neuen Zeichenkette zusammen. Die Platzhalter
»%s
«
tauscht
»string.format()
«
dabei gegen die Inhalte der Variablen
»vorname
«
und
»nachname
«
. Das Ergebnis landet wiederum in
»r:puts()
«
und somit dem fertigen HTML-Dokument (
Abbildung 2
).
»string.format()
«
stammt übrigens aus Luas Standardbibliothek
»string
«
, die der Befehl
»require
«
ganz am Anfang hinzuholt.
Listing 3
funktioniert nur, wenn das Skript die Formularinhalte per Get erhält. Sofern die Post-Methode zum Einsatz kommt, liefert
»r:parsebody()
«
alle gewünschten Daten. Die verwendete HTTP-Methode verrät
»r.method
«
. Damit lässt sich dann eine Fallunterscheidung wie in
Listing 4
basteln. Obwohl sie so auch die offizielle
»mod_lua
«
-Dokumentation vorschlägt, produzierte
»parsebody()
«
in unseren Tests nur eine Fehlermeldung. Ein Blick in den Quellcode von
»mod_lua
«
offenbarte, dass die Funktion zumindest unter Apache 2.4.2 noch gar nicht implementiert ist. Alle weiteren Funktionen und Attribute des Request-Objekts listet übrigens in der offiziellen Dokumentation des Moduls der Abschnitt "Data Structures" auf
[7]
.
Listing 4
Unterscheidung Post und Get in Lua