Thread ungelöste Meldung durch use diagnostics (30 answers)
Opened by Auctioneer at 2013-01-03 21:49

FIFO
 2013-01-03 23:01
#164620 #164620
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Es gibt grob gesagt 2 Methoden, Formulardaten von einer HTML-Seite zu verschicken: GET und POST.
Das Element $ENV{'CONTENT_LENGTH'} wird nur gesetzt, wenn der Formularversand mit POST geschieht, es gibt dann die Länge der Nachricht an.
Bei GET steht die ganze Nachricht im 'QUERY_STRING'.
Die get_form_data()-Funktion probiert zuerst die POST-Variante, dann die GET-Variante. Die Warnung erhältst Du wahrscheinlich, weil das Formular per GET abgeschickt wurde (im HTML-Quelltext zu erkennen: <form method="GET" ... >).

Du wirst die Warnung los, indem Du prüfst, ob $ENV{'CONTENT_LENGTH'} existiert und gesetzt wurde:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
sub get_form_data {
        my $temp;
        my $buffer;
        my @data;
    
        if (exists($ENV{'CONTENT_LENGTH'}) and defined($ENV{'CONTENT_LENGTH'})) {
            read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
            foreach $temp (split(/&|=/,$buffer)) {
                $temp =~ tr/+/ /;
                $temp =~ s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge;
                $temp =~ s/[\r\n]/ /g;
                push @data, $temp;
            }
        }
        foreach $temp (split(/&|=/,$ENV{'QUERY_STRING'})) {
                $temp =~ tr/+/ /;
                $temp =~ s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge;
                $temp =~ s/[\r\n]/ /g;
                push @data, $temp;
        }
        return @data;
}


Du musst beachten, dass ein Formular durchaus beide Methoden in einem Aufruf enthalten kann.

Gruß FIFO

edit/P.S.: Der Vollständigkeit halber sei mal erwähnt, dass diese Art der selbstgestrickten Formularverarbeitung fehleranfällig und selten wirklich schlau ist. Das (wahrscheinlich ohnehin eingebundene) CGI-Modul löst die Parameterübergabe zuverlässiger und stressfreier.

Editiert von FIFO: exists() ergänzt
Last edited: 2013-01-03 23:56:01 +0100 (CET)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread ungelöste Meldung durch use diagnostics