techcode has asked for the wisdom of the Perl Monks concerning the following question:

Hello Folks. I'm new to this place ;) Anyone knows some good tutorial on those two from title ? Offcourse those will be "tied" by the CGI::Application, but I got that one :) Source code of some app/script would also help much. Thanks.
  • Comment on HTML::Template Data::FormValidator Help ?

Replies are listed 'Best First'.
Re: HTML::Template Data::FormValidator Help ?
by larsen (Parson) on Jul 16, 2004 at 22:34 UTC
    I usually work in this way:
    # CGI::Application code... # The main runmode, where I show the page # sub foo { my $self = shift; my $s = $self->session(); my $tmpl = $self->load_tmpl('foo'); # ... load data in the template, as long # as the missing and invalid fields, that # come from the session (see foo_update()). foo_view( $tmpl, $data, $s->param('missing'), $s->param('invalid') +); return $tmpl->output(); } sub foo_update { my $self = shift; my $q = $self->query(); my $s = $self->session(); my %form = $q->Vars(); + my $results = Data::FormValidator->check( \%form, $profile ); + + if ($results->has_invalid() or $results->has_missing()) { + + $s->param( missing => [ $results->missing() ] , + invalid => [ $results->invalid() ] ); + + $self->redirect( { rm => 'foo' } ); + } + else { + + # Data are good, we proceed... + $self->redirect( { rm => 'bar' } ); + } + }
    Then I setup a View module, that receives the template object, data and the invalid and missing fields, like this:
    # This is called by foo() from the main application, just before # to display the page # sub foo_view { my $template = shift; my $date = shift; my $missing = shift; my $invalid = shift; $template->param( "missing_$_" => 1 ) for @$missing; $template->param( "invalid_$_" => 1 ) for @$invalid; # [...] return $template; }
    Finally, in the template, I can write things like that:
    <TMPL_IF invalid_some_field>Bad boy! This is an error message.</TMPL_I +F>
Re: HTML::Template Data::FormValidator Help ?
by PodMaster (Abbot) on Jul 17, 2004 at 07:15 UTC
Re: HTML::Template Data::FormValidator Help ?
by techcode (Hermit) on Jul 16, 2004 at 22:42 UTC
    Well I got that part :
    __ In Template File __
    <tr> <td align="right" valign="baseline">Last Name :</td> <td align="left"><input type="text" name="last_name" value = "<t +mpl_var name=last_name>"> <tmpl_if err_last_name><br><font color="#FF0000"><strong>Please +input your last name</strong></font></tmpl_if> </td> </tr>
    ___ In Class ___
    ....
    use Data::FormValidator; my $Profile = { required => [qw(first_name last_name sex city)] }; my $results = Data::FormValidator->check($Form,$Profile); if($results->has_invalid or $results->has_missing){ my $output; foreach my $f ( $results->missing ) { $output = $f. " is missing\n<br>"; }
    But the problem is that this doesnt work. It always prints out that one field is mising. And there are other (wich you can see from the profile) ... ?

    Update Added <code> tags. larsen