Formularauswertung mit PERL: Dokumentation

Zusätzlich zur Möglichkeit einfach ein E-Mail-Fenster zur Verfügung zu stellen (ACTION="mailto:..."), gibt es am ZID-Server die Möglichkeit, beliebige Formulare zu verarbeiten.
Dazu muss im Formular das Programm alles.pl aufgerufen werden, an das man z.B.
  • eine E-Mail-Adresse der TU Graz (unter dem Namen mail),
  • ein E-Mail-Subject (mailsubject),
und beliebig viele andere Felder übergeben kann.

Das Programm schickt dann eine Nachricht unter dem Subject mailsubject an die Adressen im Feld mail (durch „,“ getrennte Liste), in der immer <feldname>: <feldinhalt> steht, der Body der E-Mail wird dabei UTF-8 kodiert, Sie sollten also das Character-Set der aufrufenden HTML-Seite ebenfalls auf UTF-8 stellen:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
im Header der HTML-Seite und accept-charset="utf-8" im FORM-Tag.
Achtung:

  • als Feldname dürfen TAN, must, mustyes, mail, mailsubject, sender, Einwilligung, bgcolor, background, stylesheet, default, noemptyfields, output, separator und unequal und feedbackurl sowie feedbackok und nofeedback (genau so geschrieben) nicht (nochmals) verwendet werden, da Felder mit diesen Namen eine Sonderbedeutung haben!
    aufruf darf dann nicht verwendet werden, wenn feedbackok verwendet wird.
    Das Feld Name wird - falls vorhanden - als Realname des Absenders verwendet, im Feld realname können Sie, wenn Sie wollen, z.B. Ihren eigenen Namen mit übergeben (für die Bestätigungsmail). Falls es ein Feld sender mit einer E-Mail-Adresse gibt, dann wird diese zum Versenden der Bestätigungsmail verwendet.
  • Feldnamen dürfen (außer beim Typ radio) nicht doppelt verwendet werden.
  • Der Wert in bgcolor bzw. background wird als Hintergrund des Antwortfensters verwendet, falls kein Feld feedbackurl angegeben ist.
  • Der Wert im Feld stylesheet wird als URL für ein StyleSheet (CSS) verwendet, das in die Antwortseite eingebaut wird.
  • Der Wert in feedbackurl wird als URL für die Seite verwendet, auf die nach Abschicken des Formulars verzweigt wird.
    Wenn es kein Feld feedbackurl gibt, wird ein Standardtext mit Angabe der Eingabedaten dargestellt, im Normalfall in englischer Sprache, wenn der Browser aber de als seine bevorzugte Sprache eingestellt hat, dann in deutscher Sprache.
  • Durch Angabe von feedbackok mit Wert „ok“ kann man erzwingen, dass nachgefragt wird, ob die Daten, die übertragen werden sollen, auch stimmen.
  • Falls nofeedback den Wert „yes“ bekommt, werden in der Bestätigungs-E-Mail (siehe Feld Mail) nicht die eingegebenen Daten, sondern nur ein kurzer Bestätigungstext versandt.
  • Durch Angabe von noemptyfields mit Wert „yes“ kann man erreichen, dass nur jene Felder übermittelt werden, für die auch Werte gesetzt wurden
  • Im (hidden) Feld must kann man die Feldnamen als Liste (mit Komma ohne Leerzeichen trennen, case sensitive) übergeben, bei denen ueberprüft werden soll, ob sie ausgefüllt wurden oder nicht („Muss-Felder“), im Feld errorurl kann man dabei angeben, welche Seite statt der Defaultseite angezeigt werden soll, wenn nicht alle Felder ausgefüllt sind.
  • Im (hidden) Feld mustyes kann man die Feldnamen als Liste (mit Komma ohne Leerzeichen trennen, case sensitive) übergeben, bei denen ueberprüft werden soll, ob zumindest eines davon auf ja oder yes gesetzt ist.
  • Im (hidden) Feld unequal kann man 2 Feldnamen übergeben, deren Werte nicht gleich sein dürfen.
  • Bei Verwendung von Mail (Adresse des Absenders, an den auch ein „Kontroll-E-Mail” gesandt wird) ist unbedingt auch ein Feld TAN vorzusehen, in das eine zuvor angeforderte TAN einzugeben ist, damit das nicht zum Versenden von Spam missbraucht werden kann - Ausnahme:
    • entweder ist die Adresse eine interne Adresse der TU Graz (verifiziert z. B. durch SSO-Anmeldung)
    • oder nofeedback hat den Wert „yes

Da die eingegebenen Werte in Variablen gespeichert werden, die den Feldnamen tragen, ist es beim Typ checkbox wichtig, dass jede Checkbox einen eigenen Namen bekommt und als Wert z.B. nur „ja“ eingetragen wird - also nicht


    <INPUT TYPE=checkbox NAME=Merkmale VALUE="Merkmal 1">
    <INPUT TYPE=checkbox NAME=Merkmale VALUE="Merkmal 2">
    <INPUT TYPE=checkbox NAME=Merkmale VALUE="Merkmal 3">
   
sondern z.B.

    <INPUT TYPE=checkbox NAME="Merkmal 1" VALUE=ja>
    <INPUT TYPE=checkbox NAME="Merkmal 2" VALUE=ja>
    <INPUT TYPE=checkbox NAME="Merkmal 3" VALUE=ja>
   

Falls Sie die Daten danach z.B. in Excel weiterverarbeiten wollen, dann ist es nützlich die Daten in einem csv-Format zu bekommen, dies können Sie erreichen, indem Sie im Feld output den Wert csv übergeben, dann werden allerdings nur die Feldwerte, nicht die Feldnamen übermittelt. Der Default-Separator ist „;“, aber auch den können Sie im Feld separator selbst setzen.
Falls Sie einen Defaultwerte für nicht ausgefüllte Felder verwenden wollen, dann können Sie diesen im Feld default setzen.
Die Reihenfolge der Felder entspricht der Reihenfolge im Formular (darauf ist bei versteckten Feldern zu achten), das Datum und die IP-Adresse werden dann automatisch in die letzten beiden Felder geschrieben.

Falls es ein Feld Einwilligung gibt, dann wird abgebrochen, wenn der Wert nicht auf „ja“ oder „yes“ gesetzt wird.

Es ist weiters möglich eine Benachrichtigung an eine 2. Person zu übermitteln (z.B. als Anmeldebestätigung): richten Sie dazu ein Feld mit Namen Mail ein (das dann natürlich auch nicht nochmals verwendet werden darf)!
Falls Sie also nach der E-Mail-Adresse einer Person fragen und dieses Feld Mail nennen, dann wird an diese E-Mail-Adresse eine Bestätigung der Eintragung geschickt, in diesem Fall ist es unbedingt notwendig auch eine TAN (s.o.) zu verwenden!

In einem Feld vom Typ file (und dem Namen file) ist es möglich eine Datei mit der Mail mitzuschicken (erlaubte Zeichen: a-z, A-Z, 0-9, ., - und _), dann sollten Sie das PERL-Script aber unbedingt mit ENCTYPE="multipart/form-data" aufrufen.

Hinweis:
Falls Sie vor haben Felder zwingend vorzuschreiben, dann sollten Sie diese so markieren, dass sie auch bei Verwendung eines Text-Browsers als markiert erscheinen, eine Möglichkeit dafür sehen Sie im folgenden Beispiel.

CSV-Dateien

Neben der oben erwähnten Möglichkeit sich einzelne Eingaben im CSV-Format zusenden zu lassen, gibt es auch die Mäglichkeit eine Gesamt-CSV-Datei erstellen zu lassen.

Dazu ist es notwendig, dass Sie ein neues (verstecktes) Feld csvdir in Ihr Formular einbinden, Sie bekommen dann keine Benachrichtigung über einzelne Eingaben, sondern den jeweiligen Zwischenstand.
Das entsprechende Directory muss zuvor vom Webmaster angelegt werden.

Sollten Sie in Ihrem Formular auch optionale Eingaben vorsehen, ist es notwendig, dass Sie die Namen der Felder, die Sie dann in der CSV-Datei brauchen, in einem neuen (versteckten) Feld csvlist als Liste übergeben, damit jeder Eintrag gleich viele Felder hat. Die einzelnen Namen müssen dabei durch Beistriche getrennt werden.

Das Programm schreibt dann in die erste Zeile die Feldbezeichnungen (= Namen der Felder) und in die weiteren Zeilen die Einträge der einzelnen Aufrufe.

Beispiel