#!/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; }
You need to create an account or log in to post comments to this site.