Home  |  Linux  | Mysql  | PHP  | XML
From:Adam Jimerson Date:Tue Dec  8 18:50:57 2009
Subject: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
> > my code, the first one prints out the form, also takes an array with
> > 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
> > run it from the command line this is what I get:
>
> > vendion@SEServer:~/public_html/AmeriVista> perl -cT register.cgi
> > prototype for main::form_verify : @user at register.cgi line 43.
> > expected at register.cgi line 93, near "$user"
colon on
> > previous line?)
> > too early to check prototype at register.cgi line 36.
> > Content-type: text/html
>
> > <h1>Software error:</h1>
> > <pre>syntax error at register.cgi line 93, near &quot;$user&quot;
> > Global symbol &quot;$GoodMail&quot; 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>
> > line 93, near "$user"
> > requires explicit package name at register.cgi line 93.
> > 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
>
> if ( $user[5] =~ /^([-\@\w.]+)$/ ) {
alid->address( -address => "$user[5]", -mxcheck =>
> 1);
ur email address</p>" if $@;
>
> it should read
>
> if ( $user[5] =~ /^([-\@\w.]+)$/ ) {
alid->address( -address => "$user[5]", -mxcheck => 1);
ur email address</p>" if $@;
>
way you
>
e 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=>'vendion@vendion.net');
print "<h1>Registration 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, "<p>First Names should only contain
letters</p>\n";
}
$user[1] = param('LastName');
if ( $user[1] =~ /^([-\@\w.]+)$/ ) {
$user[1] = $1;
} else {
push @errors, "<p>Last Name Should Only Contain
Letters</p>\n";
}
$user[2] = param('Username');
if ( $user[2] =~ /^([-\@\w.]+)$/ ) {
$user[2] = $1;
} else {
push @errors, "<p>Usernames Should Only Contain
Letters and Numbers</p>\n";
}
$user[3] = param('Password1');
if ( $user[3] =~ /^([-\@\w.]+)$/ ) {
if ( length ( $user[3] ) eq '6' ) {
$user[3] = $1;
if ( length ( $user[3] ) eq '6' ) {
$user[3] = $1;
} else {
push @errors, "<p>The password is to short, it
should be atleast 6 charaters long</p>\n";
}
} else {
push @errors, "<p>The Password Should only Contain
alphanumeric characters!\n";;
}
$user[4] = param('Password2');
if ( $user[4] =~ /^([-\@\w.]+)$/ ) {
if ( length ( $user[4] eq '6' ) ) {
$user[4] = $1;
} else {
push @errors, "<p>The Password is to
Short, it should be at least 6 charaters long</p>\n";
}
} else {
push @errors, "<p>The Password Should only Contain
alphanumeric characters!\n";
}
if ( $user[3] != $user[4] ) {
push @errors, "<p>Error: Passwords do not match!</p>\n";
}
$user[5] = param('Email');
if ( $user[5] =~ /^([-\@\w.]+)$/ ) {
my $GoodMail;
$user[5] = $1;
eval {
$GoodMail = Email::Valid->address( -address =>
"$user[5]", -mxcheck => 1);
return;
};
push @errors, "<p>Error: Double check your email
address</p>\n" if $@;
$user[5] = $GoodMail;
} else {
push @errors, "<p>Incorrect Email given</p>\n";
}
$user[6] = param('studentid');
if ( $user[6] =~ /^([-\@.]+)$/ ) {
$user[6] = $1;
} else {
push @errors, "<p>Incorrect studentid given</p>\n";
}
push @errors, "<p>Incorrect studentid given</p>\n";
}
if ( @errors ) {
print "Errors found, going back to form\n"; #Debugging
print_form (@errors);
} else {
print "No errors found\n";
return @user;
}
}

sub print_form {
my @errors = @_;
print "<div align='center'>\n";
print "<table width='25%' border=1 summary='Register'>\n";
print "<td align='left' valign='middle'>\n";
if ( @errors ) {
while ( @errors ) {
print $_, "\n";
print "<br>\n";
}
}
print "<p>Registration</p>\n";
}
print "<p>Registration</p>\n";
print "<p>First Name: ", textfield(-name=>'FirstName',
-maxlength=>120), "\n";
print "<br>\n";
print "Last Name: ", textfield(-name=>'LastName',
-maxlength=>120), "\n";
print "<br>\n";
print "Username: ", textfield(-name=>'Username',
-maxlenght=>120), "\n";
print "<br>\n";
print "Password: ", password_field(-name=>'Password1',
-maxlength=>120), "\n";
print "<br>\n";
print "Repeat Password: ", password_field(-name=>'Password2',
-maxlength=>120),
"\n";
print "<br>\n";
print "CLSCC Email: ", textfield(-name=>'Email',
-maxlenght=>120), "\n";
print "<br>\n";
print "Student ID #: N", textfield(-name=>'studentid',
-maxlength=>120), "</p>";
print submit(-name=>'Submit_Form',
-maxlength=>120), "</p>";
print submit(-name=>'Submit_Form',
-value=>'Submit');
print reset, "\n";
print "</td>\n";
print "</table>\n";
print "</div>\n";
}

Just submitting a blank form is enough to trigger the problem I have
(see for yourself http://vendion.dyndns.org/cgi-bin/register.cgi), it
looks like the script stops execution or fails once it hits this block
of code:

if ( @errors ) {
while ( @errors ) {
print $_, "\n";
print "<br>\n";
}
}

According to my browser the page never finishes loading and it starts
to draw the table but never finishes. I don't know if it is because I
am handling the @errors array wrong in the print_form() subroutine
(completely possible, first time doing anything like this in Perl), I
know it has to be that block of code because I can commit it out and
everything works smoothly.

Navigate in group perl.beginners.cgi at sever nntp.perl.org
Previous Next


Your recent visits
Re: Showing errors with user input
Re: Storing a file from a cgi parameter
Re: content type headers
Need help with a login script
script working from shell, but not from browser.



  
© No Copyright
You are free to use Anything, but please consult your advocate before doing so as this website
also list content from other sources which may be copyrighted.
Site Maintained by Zareef Ahmed
Powered By PHP Consultants