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;