Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: HTML::FillInForm

by bradcathey (Prior)
on May 18, 2005 at 13:19 UTC ( #458191=note: print w/ replies, xml ) Need Help??


in reply to HTML::FillInForm

Practical application of HTML::FillInForm, used in conjunction with my favorite templating module, HTML::Template, is not well documented anywhere that I could find. Here's my take.

My biggest use of HTML::FillInForm will be for re-populating, selecting, or checking all the input types in my forms when returning the form for the user to correct a validation error, or when calling up a DB record to be edited. The associate function in H::T only "remembers" text-type input, so to avoid lots of convoluted javascript and Perl, I found the ideal tool in HTML::FillInForm. I did consider using CGI's very own popup_menu feature, but I am trying to keep my HTML completely separate from my Perl.

Anyway, here are some methods I've discovered in experimenting with the two modules:

PERL: my $q = new CGI; my $fvalues = $q -> Vars; #get all the value pairs from the submitted + form my $name = "Mr.". $q->param('name'); #alter one of them $fvalues->{name} = $name; my $template = HTML::Template->new( filename => "../form.tmpl"); my $html = $template->output; my $form = new HTML::FillInForm; my $page = $form->fill(scalarref => \$html, fdat => $fvalues); print "Content-type: text/html\n\n"; print $page; HTML: <form action="./fill.pl" method="post"> <input type="text" name="name" size="30" value="<tmpl_var name>" /> +<br /> <input type="text" name="address" size="30" /><br /> <select name="choices"> <option value="">Select...</option> <option value="1">Ciara</option> <option value="2">Lauren</option> <option value="3">Brian</option> </select><br /> <input type="submit"> </form>

Note: a value passed in the hash ref to fdat trumps assigning a value to a <tmpl_var> of the same name . So, this will not work:

my $fvalues = $q -> Vars; my $name = "Mr.". $q->param('name'); #alter one of them my $template = HTML::Template->new( filename => "../form.tmpl"); $template->param( name = $name ); my $html = $template->output;

However, this will:

my $fvalues = { address => '123 Main Street', choice => '2' }; #BTW, if the form tag is select with multiple attribute, use a referen +ce to an array of the values: #my @choices = (1, 3); #$fifvalues->{'choices'} = \@choices; my $name = "Mr.". $q->param('name'); #alter one of them my $template = HTML::Template->new( filename => "../form.tmpl"); $template->param( name = $name ); my $html = $template->output;

The above example can be used to populate a new form, e.g., when pulling up a DB record for editing.


—Brad
"The important work of moving the world forward does not wait to be done by perfect men." George Eliot


Comment on Re: HTML::FillInForm
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://458191]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (5)
As of 2015-07-05 13:21 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (67 votes), past polls