I have tried the following code to read a query-string from a CGI request
into a hash, taking into account (a) multiple select fields without knowing
the field name, (b) getting rid of names without values, and thereby,
hopefully, (c) allowing for user input alternately through a text field or
a select list, (d) getting rid of select fields where no selection was
made, in which case the value will be "---".
This is the code I used:
#!/usr/bin/perl
use CGI qw(:standard);
use CGI qw(:cgi-lib);
my $q = new CGI;
my %in = &parse_form;
sub parse_form {
my %in = $q->Vars;
foreach my $key (keys %in) {
unless ($in{$key}) { delete ($in{$key});}# get rid of empty values
if ($in{$key} eq "---") { delete ($in{$key});}# get rid of unselected
selects
$in{$key} =~ s/\0/~~/g; #use "~~" as separator for multiple sepects
}
return (%in)
}
The problem is that the hash key/values which are empty are not deleted,
nor are those pairs deleted where the value is "---". I'm puzzled because
it works with the following code (which, however, does not decode multiple
fields nor remove empty values):
sub parse_form {
my @names = $in->param;
foreach my $name ( @names ) {
if (param($name)) {
$in{$name} = $in->param($name);}
}
foreach my $key (keys %in) {
if ($in{$key} eq "---") { # if this is a select field with no value
delete ($in{$key});
}
return(%in);
}
Any ideas why the deletion doesn't work in the first "parse_form"
subroutine?
Birgit Kellner
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]