DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
CGI Script For Collecting Username And Password And Storing Them In A Database Table
// CGI script for collecting username and password and storing them in a database table
#!/usr/bin/perl
# $Id$
# CGI script for collecting username and password and storing them in a database
# table. The password is encrypted with Crypt::PasswdMD5 ready for passing to
# useradd.
use strict;
use warnings;
## no critic (ValuesAndExpressions::RequireInterpolationOfMetachars)
our ($VERSION) = '$Revision$' =~ m{ \$Revision: \s+ (\S+) }xms;
## use critic
use CGI::Pretty qw(:standard -nosticky);
use DBI;
use Crypt::PasswdMD5;
# Schema for database table to store account details:
#
# CREATE TABLE account (
# username varchar(50) NOT NULL,
# password varchar(50) NOT NULL,
# date_created datetime NOT NULL
# );
my $DBNAME = 'database';
my $DBHOST = 'localhost';
my $DBPORT = 3306;
my $DBUSER = 'username';
my $DBPASS = 'password';
# Header
my $q = new CGI;
print $q->header(),
$q->start_html(
-title => 'New Account',
-lang => 'en',
),
$q->h1('New Account');
my $submit = $q->param('submit') || q{};
my $username = $q->param('username') || q{};
my $password1 = $q->param('password1') || q{};
my $password2 = $q->param('password2') || q{};
my %ERROR = (
no_username => 'You must specify a username.',
no_password => 'You must specify a password.',
password_not_twice => 'You must specify your password twice.',
passwords_not_match => 'Both passwords must match.',
);
my $error = (!$submit) ? undef :
(!$username) ? $ERROR{no_username} :
(!$password1 && !$password2) ? $ERROR{no_password} :
(!$password1 || !$password2) ? $ERROR{password_not_twice} :
( $password1 ne $password2) ? $ERROR{passwords_not_match} :
undef
;
if (!$submit) {
# Form not submitted, so display empty form
form($q);
}
elsif ($error) {
# Show error and redisplay form
print $q->p($error);
form($q, $username);
}
else {
# Enter account details into database
my $dsn = "DBI:mysql:database=$DBNAME;host=$DBHOST;port=$DBPORT";
my $dbh = DBI->connect($dsn, $DBUSER, $DBPASS);
my $username_quoted = $dbh->quote(param('username'));
my $password_quoted = $dbh->quote(unix_md5_crypt(param('password1')));
$dbh->do("
INSERT INTO account
(username, password, date_created)
VALUES ($username_quoted, $password_quoted, NOW())
");
print $q->p('Your username and password have been recorded.');
}
# Footer
print $q->end_html();
sub form {
my $q = shift;
my $username = shift || q{};
print start_form(),
p('Username:', br(), textfield(
-name => 'username',
-value => $username,
)),
p('Password:', br(), password_field(
-name => 'password1',
)),
p('Password (again):', br(), password_field(
-name => 'password2',
)),
p(submit(
-name => 'submit',
-value => 'Submit',
)),
end_form();
return;
}





