#!/usr/bin/perl -w
#USE THE DBI (DATABSE INTERFACE) MODULE
use DBI;
#DECLARE VARIABLES WITH MYSQL CONNECTION DATA
$db=”int420_091b02″;
$user=”int420_091b02″;
$passwd=”21450705″;
$host=”db-mysql.zenit”;
$connectionInfo=”dbi:mysql:$db;$host”;
#PRINT HTTP HEADER
print “Content-Type:text/html\n\n”;
#DISPLAY THE FORM THE FIRST TIME THE SCRIPT IS RUN
if ($ENV{REQUEST_METHOD} eq “GET”)
{
&showfriends;
&displayform();
exit;
}
#ELSE PROCESS THE FORM AND INSERT INTO THE DATABASE
else
{
&parseform();
&verifyform;
&insertfriend();
exit;
}
######################################
###### SUB ROUTINES ######
######################################
#STANDARD FORM PARSING USING “POST” METHOD
sub parseform
{
read(STDIN, $buffer, $ENV{‘CONTENT_LENGTH’});
#BREAK THEDATA UP BY AMPERSANDS &&&&; AND STORE IT IN AN ARRAY
@pairs = split(/&/, $buffer);
#START A LOOP TO PROCESS FORM DATA
foreach $pair (@pairs) {
($key, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, hex($1))/eg;
$form{$key} = $value;
}
}
#################################
#INSERTING DATA INTO THE friends TABLE
sub insertfriend
{
#FORM SQL INSERT STATEMENT
$insert = qq~insert friends (lname, fname, phone, email) values (‘$form{lname}’, ‘$form{fname}’, ‘$form{phone}’, ‘$form{email}’)~;
#CONNECT TO THE MYSQL DATABASE AND CREATE A DATABASE HANDLER $dbh
$dbh=DBI->connect($connectionInfo,$user,$passwd);
#PREPARE THE MYSQL INSERT STATEMENT AND CREATE A STATEMENT HANDLER $sth
$sth=$dbh->prepare($insert);
#EXECUTE THE STATEMENT HANDLER AND TEST FOR SUCCESS
if ($sth->execute())
{
&showfriends;
&displaysuccess;
}
else
{
&displayfail;
}
#DISCONNECT DATABASE
$dbh->disconnect();
}
##############################
sub displaysuccess
{
print qq~
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>MY FRIENDS</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
</head>
<body>
RECORD ADDED!!!!!!!!
</body>
</html>
~;
}
##############################
sub displayfail
{
print qq~
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>MY FRIENDS</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
</head>
<body>
Record <b>NOT</b> Added!!!!!!!!
</body>
</html>
~;
}
##############################
sub displayform
{
print qq~
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>My Friends</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″>
</head>
<body>
<div align=”center”>
<form name=”form1″ method=”post” action=”friends3-mysql.cgi”>
<table width=”80%” border=”0″>
<tr>
<td width=”45%”><div align=”right”>Last Name: </div></td>
<td width=”100%”><div align=”left”>
<input type=”text” name=”lname” value=”$form{lname}”> $errors{lname}
</div></td>
</tr>
<tr>
<td><div align=”right”>First Name: </div></td>
<td><div align=”left”>
<input type=”text” name=”fname” value=”$form{fname}”> $errors{fname}
</div></td>
</tr>
<tr>
<td><div align=”right”>Phone Number: </div></td>
<td><div align=”left”>
<input type=”text” name=”phone” value=”$form{phone}”>
(10 digits only please) $errors{phone}</div></td>
</tr>
<tr>
<td><div align=”right”>E-mail: </div></td>
<td><div align=”left”>
<input type=”text” name=”email” value=”$form{email}”> $errors{email}
</div></td>
</tr>
<tr>
<td><div align=”right”>
<input type=”submit” name=”Submit” value=”send”>
</div></td>
<td><div align=”left”>
<input type=”reset” name=”Reset” value=”reset”>
</div></td>
</tr>
</table>
</form>
</div>
</body>
</html>
~;
}
#################################
#THIS SUB ROUTINE USES A SELECT STATEMENT TO DISPLAY THE CONTENTS OF THE friends TABLE
sub showfriends
{
#START HTML TABLE
print qq~
<?xml version=”1.0″ encoding=”iso-8859-1″?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<title>Untitled Document</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=iso-8859-1″ />
</head>
<body>
<table width=”50%” border=”1″>
<tr>
<th>ID</th>
<th>Last Name</th>
<th>First Name</th>
<th>Phone Number</th>
<th>E-mail</th>
</tr>
~;
#FORM SQL SELECT STATEMENT
$select = qq~select id, lname, fname, phone, email from friends~;
#CONNECT TO THE MYSQL DATABASE AND CREATE A MYSQL HANDLER $dbh
$dbh=DBI->connect($connectionInfo,$user,$passwd);
#PREPARE MYSQL STETEMENT AND CREATE STATEMENT HANDLER $sth
$sth=$dbh->prepare($select);
#EXECUTE SELECT STATEMENT
$sth->execute();
#LOOP THROUGH EACH RECORD AND PRINT IN AN HTML TABLE
while (@row=$sth->fetchrow_array())
{
print qq~
<tr>
<td>$row[0]</td>
<td>$row[1]</td>
<td>$row[2]</td>
<td>$row[3]</td>
<td>$row[4]</td>
</tr>
~;
}
#CLOSE HTML TABLE
print qq~
</table>
</body>
</html>
~;
#CLOSE CONNECTION TO THE MYSQL DATABASE
$dbh->disconnect();
}
###############################
#THIS SUB ROUTINE CREATES A HASH CALLED %errors THAT HAS THE SAME LIST OF KEYS AS THE %form HASH. THE VALUES OF HTE %errors HASH ARE THE ERROR MESSAGES TO BE DISPLAYED
sub verifyform
{
$missing = 0; #INITIALIZE THE MISSING FLAG TO BE ZERO
foreach (keys %form)
{
if ($form{$_} eq “”)
{
$errormsg = “Please enter the data for the required field”;
$missing = 1; #IF THERE IS MISSING DATA SET THE FLAG TO 1
}
else
{
$errormsg = “”;
}
$errors{$_}=$errormsg; #LOAD THE %error HASH WITH THE ERROR MESSAGE
}
if ($missing == 1) #IF FLAG IS SET TO 1 THEN RESEND THE FORM AND EXIT
{
&displayform;
exit;
}
}
|
Last Name:
|
$errors{lname}
|
|
First Name:
|
$errors{fname}
|
|
Phone Number:
|
(10 digits only please) $errors{phone}
|
|
E-mail:
|
$errors{email}
|
|
|
|
~; } ################################# #THIS SUB ROUTINE USES A SELECT STATEMENT TO DISPLAY THE CONTENTS OF THE friends TABLE sub showfriends { #START HTML TABLE print qq~ Untitled Document
| ID |
Last Name |
First Name |
Phone Number |
E-mail |
~; #FORM SQL SELECT STATEMENT $select = qq~select id, lname, fname, phone, email from friends~; #CONNECT TO THE MYSQL DATABASE AND CREATE A MYSQL HANDLER $dbh $dbh=DBI->connect($connectionInfo,$user,$passwd); #PREPARE MYSQL STETEMENT AND CREATE STATEMENT HANDLER $sth $sth=$dbh->prepare($select); #EXECUTE SELECT STATEMENT $sth->execute(); #LOOP THROUGH EACH RECORD AND PRINT IN AN HTML TABLE while (@row=$sth->fetchrow_array()) { print qq~
| $row[0] |
$row[1] |
$row[2] |
$row[3] |
$row[4] |
~; } #CLOSE HTML TABLE print qq~
~; #CLOSE CONNECTION TO THE MYSQL DATABASE $dbh->disconnect(); } ############################### #THIS SUB ROUTINE CREATES A HASH CALLED %errors THAT HAS THE SAME LIST OF KEYS AS THE %form HASH. THE VALUES OF HTE %errors HASH ARE THE ERROR MESSAGES TO BE DISPLAYED sub verifyform { $missing = 0; #INITIALIZE THE MISSING FLAG TO BE ZERO foreach (keys %form) { if ($form{$_} eq “”) { $errormsg = “Please enter the data for the required field”; $missing = 1; #IF THERE IS MISSING DATA SET THE FLAG TO 1 } else { $errormsg = “”; } $errors{$_}=$errormsg; #LOAD THE %error HASH WITH THE ERROR MESSAGE } if ($missing == 1) #IF FLAG IS SET TO 1 THEN RESEND THE FORM AND EXIT { &displayform; exit; } }