in reply to Re^3: Add timestamp to helpdesk form
in thread Add timestamp to helpdesk form

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; }

Replies are listed 'Best First'.
Re^5: Add timestamp to helpdesk form
by poj (Abbot) on Jul 04, 2014 at 17:01 UTC
    Add this line to your cgi and try again
    use CGI::Carp 'fatalsToBrowser';
    Remove or comment out when script is working.
    poj
      Hmm that seems to have worked sort of but it gives me this error:

      Status: 500 Content-type: text/html Software error:

      Cannot open http://www.perl03.georgeself.com/cgi-bin/forms.txt: No such file or directory at helpdesk.cgi line 26.

      For help, please send mail to the webmaster (webmaster@perl03.georgeself.com), giving this error message and the time and date of the error.

      I made that file and it does exist so not sure what it is talking about or if I'm doing something wrong?

        The database location $gbdata needs to be a filepath/filename not a URL
        my $gbdata="http://www.perl03.georgeself.com/cgi-bin/forms.txt";

        Also the folder has to be writeable by the web server and normally cgi-bin folders are not for security reasons. If you are just learning/testing then try using the /tmp folder, same as the semaphone.

        my $gbdata = "/tmp/forms.txt";
        poj