Re: Showing errors with user input
Adam Jimerson wrote: On Dec 7, 12:43 pm, g...@lazymountain.com (Greg Jetter) wrote: On Sunday 06 December 2009 10:24:31 am Adam Jimerson wrote: I am working on a registration page and there for want it to show the user errors it has found with their input. I have two subroutines in my code, the first one prints out the form, also takes an array with error descriptions that is passed by the other subroutine. The other subroutine takes the user input and verifies it, any errors that it finds it pushes into an array called @errors and passes that back to the first subroutine. The problem is it doesn't work right when I run it from the command line this is what I get: vend...@seserver:~/public_html/AmeriVista perl -cT register.cgi [Sun Dec 6 14:12:12 2009] register.cgi: Illegal character in prototype for main::form_verify : @user at register.cgi line 43. [Sun Dec 6 14:12:12 2009] register.cgi: Scalar found where operator expected at register.cgi line 93, near $user [Sun Dec 6 14:12:12 2009] register.cgi:(Missing semicolon on previous line?) [Sun Dec 6 14:12:12 2009] register.cgi: main::form_verify() called too early to check prototype at register.cgi line 36. Content-type: text/html h1Software error:/h1 presyntax error at register.cgi line 93, near quot;$userquot; Global symbol quot;$GoodMailquot; requires explicit package name at register.cgi line 93. register.cgi had compilation errors. /pre p For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. /p [Sun Dec 6 14:12:12 2009] register.cgi: syntax error at register.cgi line 93, near $user [Sun Dec 6 14:12:12 2009] register.cgi: Global symbol $GoodMail requires explicit package name at register.cgi line 93. [Sun Dec 6 14:12:12 2009] register.cgi: register.cgi had compilation errors. I have attached my code for the script, if someone could look at it and give some ideas as to how to make this work or a better way then please do You are trying to use a local scoped var as a global , line 93 $GoodMail is used out of its scope , if ( $user[5] =~ /^([...@\w.]+)$/ ) { $user[5] = $1; eval { my $GoodMail = Email::Valid-address( -address = $user[5], -mxcheck = 1); return; } #push @errors, pError: Double check your email address/p if $@; $user[5] = $GoodMail; } it should read if ( $user[5] =~ /^([...@\w.]+)$/ ) { my $GoodMail ; $user[5] = $1; eval { $GoodMail = Email::Valid-address( -address = $user[5], -mxcheck = 1); return; } #push @errors, pError: Double check your email address/p if $@; $user[5] = $GoodMail; } or even declare it up with the other globals if you want , but the way you have it now it is out of scope after that eval { } block completes. there may be other errors , fix that one first and try it again and see what else pops up. Ok well I have corrected a couple more errors with the script and it now has no errors during compile and runs until it goes to report problems it has found back to the user: #!/usr/bin/perl -T use warnings; use strict; use diagnostics; use CGI qw(:standard); use DBI; use Email::Valid; BEGIN { $|=1; use CGI::Carp('fatalsToBrowser'); } delete @ENV { 'IFS', 'CDPATH', 'ENV', 'BASH_ENV'}; my @user; #Here @user deals with: first name, last name, username, password, CLSCC Email, and Student Number my @errors; my $dbh; sub db_connect { use constant username = 'secret'; use constant password = 'secret'; my $database = 'database name'; my $server = 'localhost'; my $dsn = DBI:mysql:database=$database;host=$server;port=3306 || die Couldn't Connect to the Database: $!; The string you are assigning to $dsn is *always* true so the die() is superfluous, it will *never* execute. my $dbh = DBI-connect($dsn, username, password, {RaiseError = 1}) || die couldn't authenticate to the Database: $!; } db_connect (); print header; print start_html (-title=AmeriVista Event Logging, -author='vend...@vendion.net'); print h1Registration Form/h1\n; print hr\n; if (param) { form_verify (@user); } else { print start_form; print_form (); print end_form, \n; } sub form_verify { $user[0] = param('FirstName'); if ( $user[0] =~ /^([-\w.]+)$/ ) { $user[0] = $1; } else { push @errors, pFirst Names should only contain letters/p\n; } $user[1] = param('LastName'); if ( $user[1] =~ /^([...@\w.]+)$/ ) { $user[1] = $1; } else { push @errors, pLast Name Should Only Contain Letters/p\n; } $user[2] = param('Username');
Re: Showing errors with user input
Greg Jetter wrote: start by checking the content of @errors inside the print_form sub. with a print statement and exit. Greg Thanks for that, now that is working correctly I guess I didn't need to go through the array like I was trying. -- We must plan for freedom, and not only for security, if for no other reason than only freedom can make security more secure. Karl Popper -- To unsubscribe, e-mail: beginners-cgi-unsubscr...@perl.org For additional commands, e-mail: beginners-cgi-h...@perl.org http://learn.perl.org/
Re: Showing errors with user input
Greg Jetter wrote: You are trying to use a local scoped var as a global , line 93 $GoodMail is used out of its scope , if ( $user[5] =~ /^([...@\w.]+)$/ ) { $user[5] = $1; eval { my $GoodMail = Email::Valid-address( -address = $user[5], - mxcheck = 1); return; } #push @errors, pError: Double check your email address/p if $@; $user[5] = $GoodMail; } it should read if ( $user[5] =~ /^([...@\w.]+)$/ ) { my $GoodMail ; $user[5] = $1; eval { $GoodMail = Email::Valid-address( -address = $user[5], -mxcheck = 1); return; } #push @errors, pError: Double check your email address/p if $@; $user[5] = $GoodMail; } or even declare it up with the other globals if you want , but the way you have it now it is out of scope after that eval { } block completes. there may be other errors , fix that one first and try it again and see what else pops up. have fun Greg Ok I fixed that issue, can't even remember why I tried to declare it in the eval block I guess that is what I get for writing code while half asleep. The only other change that I made was I uncommitted out the push @errors, pError: Double check your email address/p if $@; line and here is the new error I get [Mon Dec 7 22:24:30 2009] register.cgi: Illegal character in prototype for main::form_verify : @user at register.cgi line 43. [Mon Dec 7 22:24:30 2009] register.cgi: main::form_verify() called too early to check prototype at register.cgi line 36. Content-type: text/html h1Software error:/h1 presyntax error at register.cgi line 93, near quot;pushquot; register.cgi had compilation errors. /pre p For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. /p [Mon Dec 7 22:24:30 2009] register.cgi: syntax error at register.cgi line 93, near push [Mon Dec 7 22:24:30 2009] register.cgi: register.cgi had compilation errors. There is something about this push statement that Perl doesn't like, the only thing I can think of is the if $@ part. -- We must plan for freedom, and not only for security, if for no other reason than only freedom can make security more secure. Karl Popper -- To unsubscribe, e-mail: beginners-cgi-unsubscr...@perl.org For additional commands, e-mail: beginners-cgi-h...@perl.org http://learn.perl.org/
Re: Showing errors with user input
On Tuesday 08 December 2009 9:50:57 am Adam Jimerson wrote: On Dec 7, 12:43 pm, g...@lazymountain.com (Greg Jetter) wrote: On Sunday 06 December 2009 10:24:31 am Adam Jimerson wrote: I am working on a registration page and there for want it to show the user errors it has found with their input. I have two subroutines in my code, the first one prints out the form, also takes an array with error descriptions that is passed by the other subroutine. The other subroutine takes the user input and verifies it, any errors that it finds it pushes into an array called @errors and passes that back to the first subroutine. The problem is it doesn't work right when I run it from the command line this is what I get: vend...@seserver:~/public_html/AmeriVista perl -cT register.cgi [Sun Dec 6 14:12:12 2009] register.cgi: Illegal character in prototype for main::form_verify : @user at register.cgi line 43. [Sun Dec 6 14:12:12 2009] register.cgi: Scalar found where operator expected at register.cgi line 93, near $user [Sun Dec 6 14:12:12 2009] register.cgi:(Missing semicolon on previous line?) [Sun Dec 6 14:12:12 2009] register.cgi: main::form_verify() called too early to check prototype at register.cgi line 36. Content-type: text/html h1Software error:/h1 presyntax error at register.cgi line 93, near quot;$userquot; Global symbol quot;$GoodMailquot; requires explicit package name at register.cgi line 93. register.cgi had compilation errors. /pre p For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. /p [Sun Dec 6 14:12:12 2009] register.cgi: syntax error at register.cgi line 93, near $user [Sun Dec 6 14:12:12 2009] register.cgi: Global symbol $GoodMail requires explicit package name at register.cgi line 93. [Sun Dec 6 14:12:12 2009] register.cgi: register.cgi had compilation errors. I have attached my code for the script, if someone could look at it and give some ideas as to how to make this work or a better way then please do You are trying to use a local scoped var as a global , line 93 $GoodMail is used out of its scope , if ( $user[5] =~ /^([...@\w.]+)$/ ) { $user[5] = $1; eval { my $GoodMail = Email::Valid-address( -address = $user[5], -mxcheck = 1); return; } #push @errors, pError: Double check your email address/p if $@; $user[5] = $GoodMail; } it should read if ( $user[5] =~ /^([...@\w.]+)$/ ) { my $GoodMail ; $user[5] = $1; eval { $GoodMail = Email::Valid-address( -address = $user[5], -mxcheck = 1); return; } #push @errors, pError: Double check your email address/p if $@; $user[5] = $GoodMail; } or even declare it up with the other globals if you want , but the way you have it now it is out of scope after that eval { } block completes. there may be other errors , fix that one first and try it again and see what else pops up. have fun Greg Ok well I have corrected a couple more errors with the script and it now has no errors during compile and runs until it goes to report problems it has found back to the user: #!/usr/bin/perl -T use warnings; use strict; use diagnostics; use CGI qw(:standard); use DBI; use Email::Valid; BEGIN { $|=1; use CGI::Carp('fatalsToBrowser'); } delete @ENV { 'IFS', 'CDPATH', 'ENV', 'BASH_ENV'}; my @user; #Here @user deals with: first name, last name, username, password, CLSCC Email, and Student Number my @errors; my $dbh; sub db_connect { use constant username = 'secret'; use constant password = 'secret'; my $database = 'database name'; my $server = 'localhost'; my $dsn = DBI:mysql:database=$database;host=$server;port=3306 || die Couldn't Connect to the Database: $!; my $dbh = DBI-connect($dsn, username, password, {RaiseError = 1}) || die couldn't authenticate to the Database: $!; } db_connect (); print header; print start_html (-title=AmeriVista Event Logging, -author='vend...@vendion.net'); print h1Registration Form/h1\n; print hr\n; if (param) { form_verify (@user); } else { print start_form; print_form (); print end_form, \n; } sub form_verify { $user[0] = param('FirstName'); if ( $user[0] =~ /^([-\w.]+)$/ ) { $user[0] = $1; } else { push @errors, pFirst Names should only contain letters/p\n; } $user[1] = param('LastName'); if ( $user[1] =~ /^([...@\w.]+)$/ ) { $user[1] = $1; } else {
Showing errors with user input
I am working on a registration page and there for want it to show the user errors it has found with their input. I have two subroutines in my code, the first one prints out the form, also takes an array with error descriptions that is passed by the other subroutine. The other subroutine takes the user input and verifies it, any errors that it finds it pushes into an array called @errors and passes that back to the first subroutine. The problem is it doesn't work right when I run it from the command line this is what I get: vend...@seserver:~/public_html/AmeriVista perl -cT register.cgi [Sun Dec 6 14:12:12 2009] register.cgi: Illegal character in prototype for main::form_verify : @user at register.cgi line 43. [Sun Dec 6 14:12:12 2009] register.cgi: Scalar found where operator expected at register.cgi line 93, near $user [Sun Dec 6 14:12:12 2009] register.cgi:(Missing semicolon on previous line?) [Sun Dec 6 14:12:12 2009] register.cgi: main::form_verify() called too early to check prototype at register.cgi line 36. Content-type: text/html h1Software error:/h1 presyntax error at register.cgi line 93, near quot;$userquot; Global symbol quot;$GoodMailquot; requires explicit package name at register.cgi line 93. register.cgi had compilation errors. /pre p For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. /p [Sun Dec 6 14:12:12 2009] register.cgi: syntax error at register.cgi line 93, near $user [Sun Dec 6 14:12:12 2009] register.cgi: Global symbol $GoodMail requires explicit package name at register.cgi line 93. [Sun Dec 6 14:12:12 2009] register.cgi: register.cgi had compilation errors. I have attached my code for the script, if someone could look at it and give some ideas as to how to make this work or a better way then please do -- We must plan for freedom, and not only for security, if for no other reason than only freedom can make security more secure. Karl Popper register.cgi Description: Perl program -- To unsubscribe, e-mail: beginners-cgi-unsubscr...@perl.org For additional commands, e-mail: beginners-cgi-h...@perl.org http://learn.perl.org/
Re: Showing errors with user input
On Sunday 06 December 2009 10:24:31 am Adam Jimerson wrote: I am working on a registration page and there for want it to show the user errors it has found with their input. I have two subroutines in my code, the first one prints out the form, also takes an array with error descriptions that is passed by the other subroutine. The other subroutine takes the user input and verifies it, any errors that it finds it pushes into an array called @errors and passes that back to the first subroutine. The problem is it doesn't work right when I run it from the command line this is what I get: vend...@seserver:~/public_html/AmeriVista perl -cT register.cgi [Sun Dec 6 14:12:12 2009] register.cgi: Illegal character in prototype for main::form_verify : @user at register.cgi line 43. [Sun Dec 6 14:12:12 2009] register.cgi: Scalar found where operator expected at register.cgi line 93, near $user [Sun Dec 6 14:12:12 2009] register.cgi:(Missing semicolon on previous line?) [Sun Dec 6 14:12:12 2009] register.cgi: main::form_verify() called too early to check prototype at register.cgi line 36. Content-type: text/html h1Software error:/h1 presyntax error at register.cgi line 93, near quot;$userquot; Global symbol quot;$GoodMailquot; requires explicit package name at register.cgi line 93. register.cgi had compilation errors. /pre p For help, please send mail to this site's webmaster, giving this error message and the time and date of the error. /p [Sun Dec 6 14:12:12 2009] register.cgi: syntax error at register.cgi line 93, near $user [Sun Dec 6 14:12:12 2009] register.cgi: Global symbol $GoodMail requires explicit package name at register.cgi line 93. [Sun Dec 6 14:12:12 2009] register.cgi: register.cgi had compilation errors. I have attached my code for the script, if someone could look at it and give some ideas as to how to make this work or a better way then please do You are trying to use a local scoped var as a global , line 93 $GoodMail is used out of its scope , if ( $user[5] =~ /^([...@\w.]+)$/ ) { $user[5] = $1; eval { my $GoodMail = Email::Valid-address( -address = $user[5], -mxcheck = 1); return; } #push @errors, pError: Double check your email address/p if $@; $user[5] = $GoodMail; } it should read if ( $user[5] =~ /^([...@\w.]+)$/ ) { my $GoodMail ; $user[5] = $1; eval { $GoodMail = Email::Valid-address( -address = $user[5], -mxcheck = 1); return; } #push @errors, pError: Double check your email address/p if $@; $user[5] = $GoodMail; } or even declare it up with the other globals if you want , but the way you have it now it is out of scope after that eval { } block completes. there may be other errors , fix that one first and try it again and see what else pops up. have fun Greg -- To unsubscribe, e-mail: beginners-cgi-unsubscr...@perl.org For additional commands, e-mail: beginners-cgi-h...@perl.org http://learn.perl.org/