Listing 5: submit-cookie.pl, Program to Receive HTML Form
#!/usr/bin/perl -w
use strict;
use diagnostics;
use CGI;
use Mysql;
# Create an instance of CGI
my $query = new CGI;
# Get the "user_id" cookie value, if it exists
my $user_id = $query->cookie("user_id");
# Get the parameters that the user submitted
my $name = $query->param("name");
my $color = $query->param("color");
# Connect to the local database server
my $dbh = Mysql->connect("localhost", "test");
# If this is the user's first time visiting
# our site, then create a new row in the table
# and create a cookie.
if ($user_id == 0)
{
# Create our SQL command based on the form
# contents
my $command =
"insert into user_table (user_name, user_color)";
$command .=
"values (\"$name\", \"$color\")";
# Execute the command
my $sth = $dbh->query($command);
# Get the user's unique ID in the database
$user_id = $sth->insert_id;
# Update the cookie with the right value
my $cookie = $query->cookie(-name =>
"user_id", -value => $user_id);
# Now that we have updated the value, produce
# some HTML output
print $query->header(-type => "text/html",
-cookie => $cookie);
}
# If this is a repeat visit from the user, update
# the appropriate row in the table. (The cookie
# does not need updating.)
else
{
# Create our SQL command to update the row
my $command = "update user_table ";
$command .= "set user_name = \"$name\", user_color = \"$color\" ";
$command .= "where user_id = $user_id";
# Execute the command
my $sth = $dbh->query($command);
# Send an HTTP header
print $query->header("text/html");
print "<P>\"$command\"</P>\n";
}
# Now return some text to the user
print $query->start_html(-title => "Thank you");
print "<P>Thank you! You may now go to ";
print '<a href="/cgi-bin/homepage.pl">your ';
print "personalized home page</a>.</P>\n";
print $query->end_html;