Wert einer Variablen auslesen - Newbie!
Karlchen
- perl
Hallo zusammen,
folgendes Frage: Ich möchte in einem Perl-Skript den Wert eines Radiobuttons auslesen, das per Formular zum Server gescickt wurde. Der Radiobutton heißt "newsletter" und seine möglichen Werte sind "ja" oder "nein".
In dem Formmailer-Skript, daß verwende, wird folgende Prozedur aufgerufen, um die Formularfelder zu trennen und ihnen die entsprechenden Werte zuzuweisen:
sub ParseForm
{
my ($key, $prefs, $buffer);
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{ @pairs = split(/&/, $ENV{'QUERY_STRING'}) }
elsif ($ENV{'REQUEST_METHOD'} eq 'POST')
{
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer)
}
else {Error('Bad or Unbekannte Request-Methode',
"Das Formular muß mit REQUEST=POST oder REQUEST=GET übertragen werden, Fehler in HTML-Datei prüfen!.")}
foreach $pair (@pairs)
{
local($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.)*?-->//mg;
$FORM{$name} = $value;
if ($name =~ /_/ and $name !~ /^_/)
{
($prefs, $key) = split /_/, $name, 2;
if ($prefs =~ /r/i and not $value) { push @missing_values, $key }
if ($prefs =~ /e/i and $value and
(($value =~ /(@.*@)|(..)|(@.)|(.@)|(^.)/) or
($value !~ /^.+@([?)[a-zA-Z0-9-.]+.([a-zA-Z]{2,3}|[0-9]{1,3})(]?)$/)))
{ push @bad_emails, $key }
if ($prefs =~ /d/i and $value and $value =~ /\D/) { push @only_digits, $key }
if ($prefs =~ /w/i and $value and $value =~ /\W/) { push @only_words, $key }
if ($prefs =~ /s/i and $value) { $value =~ s/^(\s)*//;
$value =~ s/(\s)*$//;
$FORM{$name} = $value; }
}
}
}
Meine Frage: Wie heißt die Variable, in der Wert meines Newsletter-Radiobuttons gespeichert ist, so daß ich eine if-Abfrage der Art
if (newsletter == ja) machen kann.
Vielen Dank für Eure Hilfe...
Karlchen
Mosche
sub ParseForm
Benutze bitte zum Parsen deiner Parameter das CGI Modul:
use CGI qw(param);
if (param('newsletter')) { ... }
if (newsletter == ja)
Du benutzt einen numerischen Vergleich für Strings. Das wird zu 0 == 0 ausgewertet und ist immer wahr.
Tschö Matti
Hi,
wie schon gesagt wurde, benutze CGI.pm, wieso machst du es dir so kompliziert ?
#!/usr/bin/perl -w
use strict;
use CGI;
my $query = new CGI;
my $newsletter = $query->param('newsletter');
print $query->header;
if ($newsletter eq 'ja') {
print "JA\n";
}
else {
print "NEIN\n";
}
is doch gleich viel kürzer als dein voriges Script.