Re: Showing errors with user input

2009-12-10 Thread John W. Krahn

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

2009-12-10 Thread Adam Jimerson
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

2009-12-09 Thread Adam Jimerson
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

2009-12-09 Thread Greg Jetter
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

2009-12-07 Thread Adam Jimerson
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

2009-12-07 Thread Greg Jetter
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/