#!/usr/bin/perl -w =head1 NAME cgi_ex_1.cgi - Show a basic example using some of the CGI::Ex tools =cut if (__FILE__ eq $0) { handler(); } ###----------------------------------------------------------------### use strict; use CGI::Ex; use CGI::Ex::Validate (); use CGI::Ex::Dump qw(debug); ###----------------------------------------------------------------### sub handler { my $cgix = CGI::Ex->new; my $vob = CGI::Ex::Validate->new; my $form = $cgix->get_form(); ### allow for js validation libraries ### path_info should contain something like /CGI/Ex/yaml_load.js ### see the line with 'js_val' below my $info = $ENV{PATH_INFO} || ''; if ($info =~ m|^(/\w+)+.js$|) { $info =~ s|^/+||; $cgix->print_js($info); return; } debug $form; ### check for errors - if they have submitted information my $has_info = ($form->{processing}) ? 1 : 0; my $errob = $has_info ? $vob->validate($form, validation_hash()) : undef; my $form_name = 'formfoo'; ### failed validation - send out the template if (! $has_info || $errob) { ### get a template and swap defaults my $swap = defaults_hash(); ### add errors to the swap (if any) if ($errob) { my $hash = $errob->as_hash(); $swap->{$_} = delete($hash->{$_}) foreach keys %$hash; $swap->{'error_header'} = 'Please correct the form information below'; } ### get js validation ready $swap->{'form_name'} = $form_name; $swap->{'js_val'} = $vob->generate_js(validation_hash(), # filename or valhash $form_name, # name of form $ENV{SCRIPT_NAME}); # browser path to cgi that calls print_js ### swap in defaults, errors and js_validation my $content = $cgix->swap_template(get_content_form(), $swap); ### fill form fields $cgix->fill(\$content, $form); #debug $content; ### print it out $cgix->print_content_type(); print $content; return; } ### show some sort of success if there were no errors $cgix->print_content_type; my $content = $cgix->swap_template(get_content_success(), defaults_hash()); print $content; return; } ###----------------------------------------------------------------### sub validation_hash { return { 'group order' => ['username', 'password'], username => { required => 1, min_len => 3, max_len => 30, match => 'm/^\w+$/', # could probably all be done with match => 'm/^\w{3,30}$/' }, password => { required => 1, max_len => 20, }, password_verify => { validate_if => 'password', equals => 'password', }, }; } sub defaults_hash { return { title => 'My Application', script => $ENV{SCRIPT_NAME}, color => ['#ccf', '#aaf'], } } ###----------------------------------------------------------------### sub get_content_form { return qq{ [% title %]

Please Enter information

[% error_header %]
Username: [% username_error %]
Password: [% password_error %]
Password Verify: [% password_verify_error %]
[% js_val %] }; } sub get_content_success { return qq{ [% title %]

Success


print "I can now continue on with the rest of my script!"; }; } 1;