cgi form fail to write to the *.txt file?
I use the following cgi script file to write the date to the *.txt file, but I fail, how come?
the cgi is as following:
#!/bnr/projects/pegasus/perl5
#Change this path!
$COMMENT_FILE = "/hct_university/she/registrationDir/rs1.txt";
# The associative array $values will contain the data.
print "Content-type: text/html\n\n";
print "<html>\n";
print "<head>\n";
# Make sure it's a POST-method form submission
if (! &VerifyForm()) {
print "<title>Not a POST Form Submission</title>\n";
print "</head>\n";
print "<h1>Not a POST Form Submission</h1>\n";
print "This page should be accessed only by submitting\n";
print "a form using the POST method. Perhaps your\n";
print "browser does not support forms.\n";
print "</body></html>\n";
exit 0;
}
#OK, it's a form submission, so parse it.
&ParseForm();
#Use the information
#OK, we have all the data. Write it to a file in which
#we collect comments from users. Open to append, of course.
$fname = ">>" . $COMMENT_FILE;
open(OUT, $fname);
#The format I write here just happens to be appropriate for
#reading with a typical Unix mail reader; for instance,
#mail -f comments.txt should open the file.
#No subject lines, though.
print OUT "sir this is the testing";
#print OUT "Name: ", $FORM{'Name'},"\n";
#print OUT "Name: ", $values{'name'},"\n";
#print OUT "job title: ", $values{"job_title"},"\n";
#print OUT "Employee #: ", $values{"employee"},"\n";
#print OUT "LOB: ", $values{"lob"},"\n";
#print OUT "Dept #: ", $values{"dept_loc"},"\n";
#print OUT "Project Number : ", $values{"project_num"},"\n";
#print OUT " ESN Number: ", $values{"phone"},"\n";
#print OUT "Course Title: ", $values{"course_title"},"\n";
#print OUT "Course Number #: ", $values{"course_num"},"\n";
close(OUT);
print "<title>Thank you, ", $values{"name"}, "</title>\n";
print "</head>\n";
print "<h1>Thank you, ", $values{"name"}, "</h1>\n";
print "Thank you for your comments.\n";
print "</body></html>\n";
exit 0;
sub VerifyForm
{
local($bad, $contentType, $requestMethod, $result);
$bad = 0;
# Check the content type of the data we've received
$contentType = $ENV{"CONTENT_TYPE"};
if ($contentType ne "application/x-www-form-urlencoded") {
$bad = 1;
}
# And make sure the POST method was used
$requestMethod = $ENV{"REQUEST_METHOD"};
if ($requestMethod ne "POST") {
$bad = 1;
}
$result = ! $bad;
}
sub ParseForm
{
local($fields, $name, $value, $data);
#Split standard input into fields
read(STDIN, $data, $ENV{"CONTENT_LENGTH"});
@fields = split(/&/, $data);
#Split the fields into names and values, creating
#an associative array indexed by the names
foreach $item (@fields) {
($name, $value) = split(/=/, $item);
$name = &UnescapeString($name);
$value = &UnescapeString($value);
$values{$name} = $value;
}
}
#Unescape any special characters in a string
sub UnescapeString
{
local($s) = $_[0];
local($pos, $ascii);
# Replace the + sign with spaces
$s =~ s/\+/ /g;
# Seek out and replace %xx hexadecimal escapes
$pos = 0;
while (($pos = index($s, "%", $pos)) != -1) {
$ascii = hex(substr($s, $pos + 1, 2));
substr($s, $pos, 3) = pack("c", $ascii);
}
$s;
}
open(OUT, $fname);
print "Open message: $!\n";
Tis will give you the system message after opening the file and will let you know if there was an error. It is a good idea to do somethink like this
open(OUT, $fname) || die "Failed to open $fname";