Oops - found another little tweak - it should be $formHandle->param instead
of $formHandle->keywords (unless your form is using an <ISINDEX> search).

Sorry 'bout that...

Jason
----- Original Message -----
From: "Jason Purdy" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Sunday, July 08, 2001 11:14 PM
Subject: Re: Required Fields Module


> Excellent points - Thanks for pointing them out!  I'll check out your
> tutorial soon (took a quick glance earlier this afternoon and it looks
very
> thorough, and a good read!  Thanks! :)).
>
> I forgot the print $query->header part of the code.  I also updated the
code
> to accept '0' values by grepping within the keywords.  I currently don't
> have to worry about multivalued parameters - I don't design my forms that
> way.
>
> Jason
>
> New subroutine:
> sub checkRequiredFields {
>     my ($formHandle, %reqdFields) = @_;
>     my ($incomplete) = 0;
>     my (@incFields) = ();
>
>     foreach $field (keys %reqdFields) {
>         if ($field =~ /(.*)\|\|(.*)/) {
>             $incomplete = 1 && push (@incFields, $reqdFields{$field})
>                 if ( (!grep(/$1\b/, $formHandle->keywords) ||
> $formHandle->param($1) eq '') &&
>                      (!grep(/$2\b/, $formHandle->keywords) ||
> $formHandle->param($2) eq '') );
>         } else {
>             $incomplete = 1 && push (@incFields, $reqdFields{$field})
>                 if !grep(/$field\b/, $formHandle->keywords) ||
> $formHandle->param($field) eq '';
>         }
>     }
>
>     if ($incomplete) {
>         print "<H2>Incomplete Form</H2>\n";
>         print "You missed the required fields:<BR>\n<UL>\n";
>         foreach $incField (@incFields) { print "<LI>$incField\n"; }
>         print "</UL>\n";
>         print "<CENTER><I>Use your browser's back button & try
> again</I></CENTER>\n";
>         exit;   # I couldn't just use the die, b/c it wouldn't format the
> $msg like I wanted
>     }
> }
>
> ----- Original Message -----
> From: "fliptop" <[EMAIL PROTECTED]>
> To: "Jason Purdy" <[EMAIL PROTECTED]>
> Cc: <[EMAIL PROTECTED]>
> Sent: Sunday, July 08, 2001 1:38 PM
> Subject: Re: Required Fields Module
>
> [snip]
>
> >
> > hi jason
> >
> > after looking at your code, and not typing it in and trying it out, here
> > are some of the problems i see with it:
> >
> > problem: what if a user passes a value of 0 in one of the required
> > fields?
> >
> > let's say one of your required fields is 'number_of_kids'.  some people
> > may not have any, and therefore may enter '0'.  your code checks to see
> > if a required field is true/false.  your code will not accept a value of
> > 0 (it will think it's false, even though it's a valid answer).
> >
> > instead of checking to see if a field is true/false, check to see if
> > it's defined, then check to see if it contains a minimum number of
> > characters.
> >
> > problem: if there is an error, you're not sending the appropriate header
> > command.
> >
> > if you just try to print HTML without calling $query->header, the result
> > will be an internal server error.
> >
> > problem: what if your parameters are multivalued?
> >
> > assume for the moment your cgi is called like this:
> >
> > /cgi-bin/whatever.cgi?name=fliptop&lang=perl&lang=english
> >
> > will your code handle these values the way you want?
> >
> > here are my recommendations:
> >
> > 1)  put the parameters you're looking for into a list like this:  (key1,
> > value1, key2, value2, key2, value3, ...)
> > 2)  create a parameter hash from this list with values being either
> > scalar or references to arrays:
> > %parameters = (
> >   key1 => value1,
> >   key2 => [ value2, value3]
> > );
> > 3)  check each key's value(s) (if it's required, ie.- not NULL) to see
> > that they're defined and have a minimum length.
> >
> > if you haven't already seen it, i'd recommend reading the tutorial i'm
> > working on which explains how to do all of these things.  it can be
> > found at http://www.peacecomputers.com/addressbook_toot-intro.html.
>

Reply via email to