Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 224
  • Last Modified:

Two actions - Two submit buttons

I have this page - http://elan.champlain.edu/~rcoughlin32001/booksonline.html - and submits the data to a database.

The first button submits the page to the database
The second button i want to be able to retrieve the password based on the account number given.

I am confused on how to make each a different action. I have them as two different names..but am not sure how to call them in Perl. In PHP I know you can do a REQUEST say and have it equal a name.

I am thinking a simple IF ELSE

IF CREATE

   CREATE ACCOUNT

ELSE RETRIEVE

  RETRIEVE PASSWORD
  SQL SELECT STATEMENT FROM DB

Any ideas?

Thanks,

Ryan


#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser); # errors will fall to browser and be printed
use DBI;
use strict;
 
print "Content-type:text/html \n\n";
 
# username and password for the user
my $acc_num   = param('acc_num');
my $password  = param('password');
 
# login information
my $database  = "rcoughlin32001";
my $dbuser    = "rcoughlin32001";
my $dbpass    = "lacrosse";
 
# select, type, database, server
my $dsn       = "DBI:mysql:$database:localhost";
 
# connect
my $dbh       = DBI -> connect($dsn, $dbuser, $dbpass, {RaiseError => 1}) or die "Error connecting: $DBI::errstr\n";
 
	# encrypt then store in database
	# replace a-k with 0-9
	$password  =~ tr/[a-k]/[0-9]/;
	
	# store data in database
	my $query = $dbh -> prepare("INSERT INTO bookaccounts (ID, acc_num, password) VALUES (null, '$acc_num', '$password')");
	my $done  = $query -> execute();
	
	if($done){
		print "Added to database.<br />";
	}else{
		print "Didn't add to database. <a href=\"../booksonline.html\">Click</a> to go back.<br /><br />";
	}
	# for debug
	print "<b>OUTPUT</b><br /><br />";
	print "<b>Account Number:</b> " . $acc_num . "<br/>";
	print "<b>Password:</b> " . $password;

Open in new window

0
catonthecouchproductions
Asked:
catonthecouchproductions
  • 3
2 Solutions
 
TintinCommented:
You could leave your form as is, but I find it easier to use the same submit name, eg:

<input type="submit" name="action" value="Create Account" /><label></label>
<input type="submit" name="action" value="Retrieve Password" />

Then in the Perl script, you do

my $action = param('action');

if ($action eq 'Create Account') {
  ...
}
elsif ($action eq 'Retrieve Password') {
..
}
0
 
catonthecouchproductionsAuthor Commented:
Nice..thank you! Easier than i thought it would be!

I get this:

>>Can't call method "execute" on an undefined value at booksonline.cgi line 54.

Line 54:       my $sth-> execute;

Any ideas? And to decrypt..does that look right..what i have in my code?

Thanks!
#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser); # errors will fall to browser and be printed
use DBI;
use strict;
 
print "Content-type:text/html \n\n";
 
# username and password for the user
my $acc_num   = param('acc_num');
my $password  = param('password');
my $action    = param('action');
 
# login information
my $database  = "rcoughlin32001";
my $dbuser    = "rcoughlin32001";
my $dbpass    = "lacrosse";
 
# select, type, database, server
my $dsn       = "DBI:mysql:$database:localhost";
 
# connect
my $dbh       = DBI -> connect($dsn, $dbuser, $dbpass, {RaiseError => 1}) or die "Error connecting: $DBI::errstr\n";
 
# if create account was pushed
if($action eq 'Create Account'){
 
	# encrypt then store in database
	# replace a-k with 0-9
	my $encrypt_pass  =~ tr/[a-k]/[0-9]/;
	
	# store data in database
	my $query_create = $dbh -> prepare("INSERT INTO bookaccounts (ID, acc_num, password) VALUES (null, '$acc_num', '$password')");
	my $done  = $query_create -> execute();
	
	if($done){
		print "Added to database.<br />";
	}else{
		print "Didn't add to database. <a href=\"../booksonline.html\">Click</a> to go back.<br /><br />";
	}
	# for debug
	print "<b>OUTPUT</b><br /><br />";
	print "<b>Account Number:</b> " . $acc_num . "<br/>";
	print "<b>Password:</b> " . $password;
}elsif($action eq 'Retrieve Password'){
	
	# decrypt then print
	# replace a-k with 0-9
	my $decrypt_pass  =~ tr/[0-9]/[a-k]/;
	
	# store data in database
	my $query_retrieve="SELECT password FROM bookacounts WHERE acc_num=\"$acc_num\"";
	my $sth = $dbh->prepare($query_retrieve);
	my $sth-> execute;
	
	print $sth;
}

Open in new window

0
 
FishMongerCommented:
Change
my $sth-> execute;

To
$sth-> execute;
0
 
catonthecouchproductionsAuthor Commented:
Thank you both!
Ryan
0
 
catonthecouchproductionsAuthor Commented:
Worked like a charm!

Thanks again,

Ryan
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now