Zur Website

Start Buchtipp Noch mehr Lösungen und Tricks Kontakt Copyright Impressum







Perl Modul:

Formular-Werte lesen

Variablen von "get" /
"post" Requests

Dekodierung abschalten
Rückgabe Request URL

Nr.25

©2004



Erläuterung:

Die Subroutine FORM_DECODE liest die Variablen eines "get" oder "post" Requests ein und gibt diese als Hash-Refenz (sehr praktisch!) zurück. Zusätzlich wird der Request-String ausgeben.

Mit der Option "1" >> &FORM_DECODE(1) kann die URL-Dekodierung verhindert werden.

In der beiliegenden Datei PL0008.pm ist die Programmierung als eigenes Perl-Modul ausgeführt, lauffähig sowohl unter Linux/Perl als auch Windows/Active Perl.

Subroutine:

sub FORM_DECODE
{
my ($RequestUrl,@pairs,$temp,$item,$key,$content,%Felder,@sortlist,@mandatory,$i);
$RequestUrl = 'http://'.$ENV{'SERVER_NAME'}.$ENV{'SCRIPT_NAME'}.'?'; # http://www.baurat.de/cgi-bin/boerse/MaterialPool/mp.cgi
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
# Namen-/Daten-Paare aufteilen
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN,$temp,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$temp);
}
$i = 0;
foreach $item(@pairs)
{
($key,$content)=split(/=/,$item,2);
$content=~tr/+/ /;
unless ($_[0])
{
$content=~s/%(..)/pack("c",hex($1))/ge;
}
$content=~s/\t/ /g;
$Felder{$key}=$content;
if ($i==0) {$RequestUrl = $RequestUrl.$key.'='.$Felder{$key};} # setzt Request als String zusammen
else {$RequestUrl = $RequestUrl.'&'.$key.'='.$Felder{$key};} # incl. (leider) &submitButtonName=Name
$i++;
}
return(\%Felder,$RequestUrl);
}

Aufruf:

1. Subroutine

($fields,$RequestUrl) = &FORM_DECODE;

z.B.

$fields->{'Name'} # z.B. "Heinz"

Alle Variablen:

while (($key,$val) = each %{$fields})
{
# Tue etwas mit jedem Paar
}

$RequestUrl - z.B. http://www.abc.de/cgi-bin/mp.cgi?Feld1=Inhalt&absenden=Los!

Die Subroutine muss im Programmtext gespeichert sein.

2. Modul

A:Speichern Sie das Modul in Ihrem Perlverzeichnis unter

/usr/bin/perl/lib/EIGEN/Form/PL0008.pm (Linux)

c:\Perl\lib\EIGEN\Form\PL0008.pm (Windows)

B: Fügen Sie in den Kopf Ihres Perl-Programmes folgende Zeile ein:

use EIGEN::Form::PL0008 qw(FORM_DECODE);

C: So rufen Sie die Subroutine auf:

($fields,$RequestUrl) = FORM_DECODE; # ohne "&" korrekt!

Die Subroutine muss nicht im Programmtext gespeichert sein.

3. Hinweis

Der Aufruf ($fields,$RequestUrl) = &FORM_DECODE(1); unterdrückt die URL-Decodierung .
D.h. z.B. Feld $fields->{'Strasse'} bleibt "%d6hnhausener%20Stra%dfe" statt "Öhnhausener Straße".