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: [PHP-WIN] is ZendStudio IDE necessary????
RE: Global scope
Re: sequential value check
Perl script to monitor memory usage on unix box


  
© No Copyright
You are free to use Anything
Site Maintained by Zareef Ahmed
Powered By PHP Consultants