On Jan 5, 8:33 pm, g...@lazymountain.com (Greg Jetter) wrote: > On Monday 05 January 2009 2:22:08 pm marys wrote: > > > > > > > Does anyone know how to set up a large number of textfields for data > > input and then parse them conveniently? In the CGI.pm book it shows > > how to use the form element 'textfield' like so: > > > #!/usr/bin/perl -wT > > use CGI::Carp qw(fatalsToBrowser); > > use CGI ':standard'; > > use CGI::Pretty; > > use strict; > > use diagnostics; > > my $x = new CGI; > > print $x->header; > > print $x->start_html; > > print $x->center($x->br, $x->h1("Here are three textfields:\n"), > > $x->startform(-method=>"POST",-action=>"parsnip.cgi"), > > textfield(-name=>'X1',-size=>5.), > > textfield(-name=>'X2',-size=>5.), > > textfield(-name=>'X3',-size=>5.), > > $x->p, > > $x->submit( -name=>"Submit")); > > print $x->endform; > > print $x->end_html; > > > and I would like to check that the fields contain no special > > characters: > > > #!/usr/bin/perl -wT > > use CGI::Carp qw(fatalsToBrowser); > > use CGI qw(:standard -no_xhtml); > > #use CGI ':standard'; > > use CGI::Pretty; > > use strict; > > use diagnostics; > > my $x = new CGI; > > > my $X1=param('X1'); my $X2=param('X2'); my $X3=param('X3'); > > if( > > ($X1 !~ /^[\d.]+$/) && ($X1 !~ /^\s*$/) > > > || ($X2 !~ /^[\d.]+$/) && ($X2 !~ /^\s*$/) > > || ($X3 !~ /^[\d.]+$/) && ($X3 !~ /^\s*$/) ) > > > { > > print $x->header; > > print $x->start_html(-title=>'parsnip',-bgcolor=>'silver'); > > print $x->font({color=>"blue"}); > > print $x->center( "<br>", $x->h1("Error in input!\n"), > > $x->h1(" Use digits and decimal points only!\n"), > > $x->h2(" Exiting!\n") ); > > exit; > > }else{ > > print $x->redirect(-URL=>'done.cgi'); > > } > > > with the 'done.cgi' script: > > > #!/usr/bin/perl -wT > > use CGI::Carp qw(fatalsToBrowser); > > use CGI qw(:standard -no_xhtml); > > #use CGI ':standard'; > > use CGI::Pretty; > > use strict; > > use diagnostics; > > my $x = new CGI; > > > print $x->header; > > print $x->start_html(-title=>'done',-bgcolor=>'silver'); > > print $x->font({color=>"blue"}); > > print $x->center( "<br>", $x->h1("Done!\n"); > > exit; > > > The problem is that if I want to collect data from lots of textfields, > > like maybe 100, I get huge, sloppy scripts where I have to do a lot of > > typing for the variables X1-X100 and I make a lot of mistakes. I bet > > there's a better way in the Perl world to do this. I tried making an > > array going from 1 to 100 and calling the variables "X.$_" but it > > didn't work. > > Is there a better way that anyone knows about? Thank you. > > use a template system like HTML::Template to create you form page , not > CGI.pm , and process it with CGI.pm . Or use HTML to create your form. if > your text fields are static and won't change. Something like this you want > to separate out the presentation of the form from the processing of the form > input. > > Greg- Hide quoted text - > > - Show quoted text -
Thanks, Greg. the HTML::Template looks like something that will work. ms -- To unsubscribe, e-mail: beginners-cgi-unsubscr...@perl.org For additional commands, e-mail: beginners-cgi-h...@perl.org http://learn.perl.org/