On Wed, Jan 9, 2013 at 10:11 AM, Bill Stephenson <bi...@ezinvoice.com>wrote:

> date=11/01/2003
>
> I want to trap bad data sent to time::local  in a loop where I use these
> lines:
>
>         my ($date_month, $date_day, $date_year) = split(/\//,
> $DOCUMENT->param("date"));
>
>         $date_year = ($date_year-1900);
>         $date_month = ($date_month-1);
>
>         my $test_date = timelocal($sec, $min, $hours, $date_day,
> $date_month, $date_year);
>

I'm allowing "01-01-2013" too

 my $date_str = $DOCUMENT->param("date");
if ( $date_str and $date_str = m#(\d+)[/-](\d+)[/-](\d+)# ) {
    my ($date_month, $date_day, $date_year) = ($1, $2, $3);
...

}
else {
    warn("bad date: $date_str");
}

You should always parse user input to get exactly what you want (digits)
and not use their input directly.  You should probably check (if it's an
text input and not a pick list, say) that you have a 4 digit year etc.

-- 

a

Andy Bach,
afb...@gmail.com
608 658-1890 cell
608 261-5738 wk

Reply via email to