Thread ungelöste Meldung durch use diagnostics
(30 answers)
Opened by Auctioneer at 2013-01-03 21:49
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"
|