Hi Sam, I really appreciate your help.  I will look
into using perltidy, as I know it will make getting
help easier.

I removed that line completely since mode_1 =>
login_form , and start_mode is set to mode 1 in the
subroutine setup. Therefore it will be going to mode_1
automatically anyhow...

I saved the changes and gave it another go, but got
the same result.  Any other ideas?

Attached is the latest version:


--- Sam Tregar <[EMAIL PROTECTED]> wrote:

> On Thu, 15 Jun 2006, Chico wrote:
> 
> > Attached is the entire program... Please take a
> look
> > and advise on any improvements.  I am just
> learning so
> > take it easy on me ;0)
> 
> The bug that's causing your error is this:
> 
>    &login;
> 
> That's calling the login subroutine, but not as a
> method.  So when you
> do this:
> 
>    my $self = shift;
> 
> You get bupkis.  Instead:
> 
>    $self->login;
> 
> Also, use perltidy on your code!
> 
> -sam
> 
>
---------------------------------------------------------------------
> Web Archive: 
>
http://www.mail-archive.com/[email protected]/
>              
> http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 
package Portal::Application_2;
use base 'CGI::Application';
use CGI::Session();
use DBI;
use strict;

sub cgiapp_init
{
    my $self=shift;
        #cgi::application uses the cgi.pm module.  $self-_query() is equal to 
$q=CGI->new()
        my $q=$self->query();

        #create the variable to make the connection to the SQL server, so 
whenever you need to connect you call the $dbh variable
        my $dbh = 
DBI->connect("DBI:mysql:database=gns_workflow;host=localhost",'root', 'MySQL!') 
or die "didnt connect to the database";
        #putting the $dbh into the $self object, that way you can call $dbh 
anywhere in the program by issuing the command $self->param('dbh')
        my $self->param('dbh' => $dbh) or die "couldnt associate dbh variable 
to self";
        # Initialize the session and get the id.
        my $session = CGI::Session->new
                (
                'driver:MySQL',
                $q->cookie('CGISESSID') || $q->param('CGISESSID') || undef,
                                {
                                 Handle=>$dbh,
                                 LockHandle=>$dbh
                                }
                )or die "couldn't establish session";
    
        #sets the expire time for the session.  It only expires after that 
amount of time after inactivity.  Every time the user does something the expire 
time is reset.
        $session->expire("10m");
        
        #put the session id into the $sessionid variable
        my $sessionid = $session->id();
        
        # Put session id and into $self object
    $self->param('sessionid'=>$sessionid);
    # Put session into $self object
        $self->param('session'=>$session);
        
}

#when using CGI::Applicaiton you need to define the basics of your application. 
 For example, what the rum modes are, and which run mode that should be started 
in first.
sub setup
{
        #Here we are getting the object. Think of it as a box that is passed 
around from one person to another, you can put stuff in and take stuff out of 
the box.  
        #We have just accepted the "box" by typing "$self=shift;". 
        #The "shift" function removes the first value of the specified array.  
If you dont specify an array the function shifts @ARGV (in the main program), 
or @_ (in subroutines)
        #Since we didnt specify an array, and are in a subroutine we are 
grabbing the @_
        #Within a subroutine the array @_ contains the parameters passed to 
that subroutine, and is considered a special variable
        my $self = shift;
        #cgi::application is based on the idea that everything a web 
application does is a mode.  Basically what this breaks down to is a mode is 
simply associated with a subroutine.
        # I find it simpler to just use the subroutine name for both the mode 
name and the subroutine, however the directions show ('mode1' => 
'subroutine_name')
        $self->run_modes
                (
                'mode_1' => 'login_form',
                'mode_2' => 'access_denied',
                'mode_3' => 'validate_user',
                'mode_4' => 'main_page'
                );
        #Here we are picking the mode we want to run first
        $self->start_mode('mode_1');

        
}





sub access_denied
{
    return "Sorry, your access has been denied.  Please make sure you have 
permissions to perform that function.";
}

sub login_form
{
        my $self = shift;
        my $login_form = <<ENDHTML;
                <FORM ACTION=index.pl METHOD="POST">
                 <TABLE>
                  <TR>
                   <TD>Username:</TD>
                   <TD><INPUT TYPE="text" NAME="username" SIZE=20></TD>
                  </TR>
                  <TR>
                   <TD>Password:</TD>
                   <TD><INPUT TYPE="password" NAME="password" SIZE=20></TD>
                  </TR>
                  <TR>
                   <TD><INPUT TYPE="hidden" NAME="rm" VALUE="mode_4"></TD>
                  </TR>
                 </TABLE>
                 <INPUT TYPE="submit" VALUE="Submit">
                </FORM>
ENDHTML
}



sub validate_user
{
        my $self = shift;
        #Putting the "username submitted in the HTML Form into the $username 
variable.
        my $username = $self->query("username");
        #Putting the "password" submitted in the HTML Form into the $password 
variable
        my $password = $self->query("password");
        
        ###SQL Query
        my $password_query = "SELECT * FROM user WHERE username = ? AND 
password = ?";
        
        my $sth = $self->param('dbh')->prepare($password_query);
        my $res = $sth->execute($username, $password)->fetchrow_hashref();

        if ($res->{username} eq $username)
        {
                return "hello world";
        } else {my $return = "Please click the back button and enter a username 
and password.  Both fields must be filled out.";}
                
}

sub main_page
{
my $self = shift;
my $hereyouare = "Welcome to the new GNS portal!";
$hereyouare;
}

1;
---------------------------------------------------------------------
Web Archive:  http://www.mail-archive.com/[email protected]/
              http://marc.theaimsgroup.com/?l=cgiapp&r=1&w=2
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to