Ok I added your code and uploaded them however the problem I'm running into is when I run the helpdesk.html and input random nonsense, as soon as I hit submit it locates the cgi file but nothing is displayed at all just a blank webpage. Also I look at the "database" file forms.txt and nothing was written to it. Sorry for all the questions I'm so new to PERL and not fully understanding this section. I'll post both the HTML and the CGI file.
Here is a link to the helpdesk ticket submit page.
http://www.perl03.georgeself.com/helpdesk.html
<form action="/cgi-bin/helpdesk.cgi" name="helpdesk">
<body style="background-color:yellow;">
<p>
<u><h1 style="font-family:verdana;"><strong>Problem type:</strong></h1
+></u>
<input type="radio" name="probtype" value="hardware"/><strong>Hardware
+</strong>
<input type="radio" name="probtype" value="software"/><strong>Software
+</strong>
<br/>
<textarea name="problem" rows="10 cols="40">
Describe your problem.
</textarea>
<br/>
<strong>YourName:</strong>
<input type="text" width="40" name="name" /><br/>
<input type="submit" name="submit" value="Submit Problem" />
</form>
CGI:
#!/usr/bin/perl -w
use strict;
use CGI qw(:all);
use Fcntl qw(:flock);
# Location of the guestbook log file. Change this to suit your needs
my $gbdata="http://www.perl03.georgeself.com/cgi-bin/forms.txt";
# Any file name will do for semaphore.
my $semaphore_file="/tmp/helpdesk.sem";
# Function to lock (waits indefinitely)
sub get_lock {
open(SEM, ">$semaphore_file")
|| die "Cannot create semaphore: $!";
flock(SEM, LOCK_EX) || die "Cannot lock: $!";
}
# Function to unlock
sub release_lock {
close(SEM);
}
# This function saves a passed-in help desk HTML form to a file
sub save {
get_lock();
open(GB, ">>$gbdata") || die "Cannot open $gbdata: $!";
print GB "name: ", param('name'), "\n";
print GB "type: ", param('probtype'), "\n";
print GB "problem: ", param('problem'), "\n";
print GB "time: ", scalar(localtime), "\n";
close(GB);
release_lock();
}
# This function displays the contents of the help desk log file as HTM
+L,
# with minimal formatting.
sub display {
open(GB, $gbdata) || die "Cannot open $gbdata: $!";
while(<GB>){
print "<B>$_</B><P>"; # The name
my($type,$prob);
$type=<GB>; # Assumes that each entry is
$prob=<GB>; # exactly 3-lines long...
my $time=<GB>;
print "$type<P>";
print "$prob<BR><HR>";
print $time;
}
close(GB);
}
print header;
# The parameter 'submit' is only passed if this CGI program was
# executed by pressing the 'submit' button in the form in listing 22.7
if (defined param('submit')) {
save;
display;
} else {
display;
}
|