# Unquote form data sub unhtml { my ($str) = @_; $str =~ s/%([0-9a-f]{2})/chr(hex($1))/eig; $str =~ s/\+/ /g; $str; } # Make strings safe for form values sub html_safe { my ($str) = @_; $str =~ s/"/"/g; $str; } sub parse_query { my $QUERY_STRING; if ($ENV{REQUEST_METHOD} eq "POST") { read(STDIN,$QUERY_STRING,$ENV{CONTENT_LENGTH}); } else { $QUERY_STRING = $ENV{QUERY_STRING}; } chomp($QUERY_STRING); # $QUERY_STRING is of the form: "variable=value&var2=val2&.." my @querys=split(/[\&\?]/,$QUERY_STRING); my (%query,$var,$val); foreach my $str (@querys) { $var=$str if (!(($var,$val) = ($str =~ /([^=]*)=(.*)/))); $val=unhtml($val); $query{$var}=$val; } \%query; } sub check_form_page1 { my ($query) = @_; my @bad; $_ = $query->{first_name}; push(@bad,[first_name,""]) unless (/\S/); $_ = $query->{email}; push(@bad,[email,"email must be of form login\@somewhere.com"]) unless (/\S\@\S+\.\S+/); $_ = $query->{cost}; push(@bad,[cost,"cost must be a number"]) unless (/^\d+$/ && $_); push(@bad,[airport,"Must select one of the Airport: options"]) unless ($query->{airport}); $_ = $query->{airport}; push(@bad,[airport,""]) unless ($_ ne none || 0); $_ = $query->{airport}; push(@bad,[airport,"Mike lives in oak"]) unless ($_ ne oak || $query->{first_name} =~ /mike/); push(@bad,[fav_color,"Must select one of the Favorite color options"]) unless ($query->{fav_color}); $_ = $query->{fav_color}; push(@bad,[fav_color,"Only people named Mike like the color red"]) unless ($_ ne red || $query->{first_name} =~ /mike/); return unless @bad; print "