Wie kann ich Parameter aus einem Formular auslesen?

(Autor: Darkmage & perl-community, Relais)

Hierfür gibt es 2 sinnvolle und populäre Methoden

Zunächst einmal, um die Situation zu verstehen, soll erklärt werden wie die Formulardaten mit ihren ganzen Eingabefeldern, Radiobuttons, Uploadfeldern etc. eigentlich zum Server gelangen.

Hierbei unterscheidet man 2 Methoden:

* GET: Bei dieser Methode werden die Daten zunächst an den Server gesendet, welcher dann die Daten an das Script weiterleitet. Diese Daten werden dazu an den sogenannten Query String angehangen, getrennt durch ein Fragezeichen. Darum erkennt man die Get Methode an einer solchen Adresse:

http://www.server.com/cgi-bin/script.cgi?zahl1=329&zahl2=382&name=foo

Pro: Bei dieser Methode können die vom Script ausgegebenen Seiten als Favorit gespeichert oder als Link weitergegeben bzw. in einem <a href> eingebungen werden. Der Aufrufende gelangt damit immer auf die richtige Seite.

Kontra: Die Länge des Get-Strings ist von Browser zu Browser verschieden begrenzt, zudem werden evtl. sensitive Daten auch in der History des Browsers gespeichert.

* POST: Bei dieser Methoden werden die Daten direkt an das Script gesendet, welches im action des <form> Tags festgelegt wird.

Pro: Die Menge der Daten ist quasi unbeschränkt und auch ein Upload von Dateien ist über diese Methode möglich. Zudem werden sensitive Daten, da nicht an den URL angehangen, nicht in der Browserhistory gespeichert.

Kontra: Keine Verlinkung zu POST Ausgaben möglich

Beide Methoden haben ihre Daseinsberechtigung und zu sagen "Diese Methode ist besser" wäre falsch. Sie als Programmierer müssen entscheiden, in welchem Fall welche Methode am besten ist. Nehmen wir dazu als Beispiel ein Forum, welches völlig CGI basiert ist:

Beiträge eintragen per POST um die Größenbeschränkungen der Browser zu umgehen, die Daten nicht in der Browserhistory zu offenbaren und User daran zu hindern, einen Repost über einen einfachen Reload der Seite vorzunehmen. (Bei POST erscheint eine entsprechende Warnung)

Beiträge lesen per GET, um so einen Link zu dem Beitrag in anderen Beiträgen posten zu können.


Nun aber zu den eigentlichen Möglichkeiten, wie man die Inhalte bestimmter Formularfelder ausliest und für sein Programm nutzbar macht. Ich werde nicht erklären, wie man ein Formular aufbaut, nähere Informationen hierzu in SelfHTML? - siehe Ende des Textes.



1. Methode "CGI.pm objektorientiert"



Das CGI Modul, welches mit perl 5004 das erste Mal zur Standarddistribution gehörte und seitdem aus nicht wegzudenken ist die sichere Methode. Der Umgang mit CGI.pm ist sehr einfach, das Auslesen erfolgt über die Funktion param, welche vom Modul bereitgestellt wird. Hier ein kleines Beispiel - wir wollen den Inhalt des Textfeldes test im Skalar $formTest speichern:



Wem mehr an OOP liegt kann auch dies tun:

                use CGI;
                my $form = CGI::-&gt;new;
                my $form_test = $form->param('test');
         


Und fertig.



2. Methode "CGI.pm ohne oo"

                use CGI qw(:standard);
                my $form_test = param('test');
         


Und fertig.



Welche Methode sie letztendlich nutzen liegt ganz bei Ihnen. Ich persönlich empfehle Ihnen jedoch CGI.pm. Es ist aktuell, zuverlässig, einfacher und übersichtlicher als alle zuvor genannten Methoden.



3. Methode "cgi-lib.pl"



Im Netz tummelt sich, insbesondere in alten Scripten immer noch das cgi-lib.pl, welches mit require eingebunden wird und Funktionen liefert, welche auch die Aufgabe verrichten.


Jedoch ist cgi-lib.pl mittlerweile angegraut, wird nicht mehr aktualisiert und gehört zu den Überresten von perl4.



perldoc CGI (CGI Manpage)
http://www.google.de/custom?hl=de&ie=ISO-8859-1&domains=www.perldoc.com&sitesearch=www.perldoc.com&q=CGI&btnG=%3E (Google Perldoc.com: CGI)
http://search.cpan.org/search?query=CGI&mode=module (CPAN: CGI)
http://www.teamone.de/selfhtml/tch.htm (SelfHTML? - Formulare)
http://www.oreilly.de/catalog/perlmodger/manpage/cgi.htm (Deutsche Übersetzung)
http://www.linux-magazin.de/ausgabe/1998/03/CGI/cgi1.html (Interessante Artikel zu CGI)
http://www.linux-magazin.de/ausgabe/1998/03/CGI/cgi2.html (dito)
http://www.linux-magazin.de/ausgabe/1998/03/CGI/cgi3.html (dito)
http://www.linux-magazin.de/ausgabe/1998/03/CGI/cgi4.html (dito)

Ergänzungen, Kommentare

Parameter in ein Hash lesen

Mit CGI.pm kann man noch einfacher die Parameter auslesen. Mit der oben genannten Methode braucht man für jedes Formularfeld eine eigene Variable. Bei 20 Feldern würde 20 mal
  my $variable = param('Feldname');
stehen. Das ist umständlich und schlecht zu warten.

Man kann sich mit CGI.pm das Leben aber sehr vereinfachen. Man liest alles in ein Hash ein.
  my $cgi = CGI->new();
  my %formulardaten = $cgi->Vars();

Als Schlüssel des Hashs dienen die Feldnamen aus dem Formular und die Values sind die Benutzereingaben. Wenn man also wissen möchte, was der Benutzer in das Feld 'dateiname' eingetragen hat, so macht man einfach:
  print $formulardaten{dateiname};

ReneeBaecker 08.09.2004

Kommentare werden am besten in folgender Form vorgenommen, damit sie im Inhaltsverzeichnis angezeigt werden:
       ---### Main.??? - 14 Jul 2003 - Betreff
      

UtilFaqSubForm edit

Titel Wie kann ich Parameter aus einem Formular auslesen?
Autor Darkmage & perl-community, Relais
Bereich FaqCGI
Tags CGI
Topic revision: r7 - 2011-07-14 - 19:03:23 - GwenDragon
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.