Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

cgi form fail to write to the *.txt file?

Posted on 2000-02-16
7
245 Views
Last Modified: 2010-03-05
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;
}
0
Comment
Question by:syu1
  • 4
  • 3
7 Comments
 
LVL 3

Expert Comment

by:guadalupe
ID: 2528836
Try adding these lines:

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";
0
 

Author Comment

by:syu1
ID: 2528974
it seems the file can not be opened, it is there, and the path seems ok, I just dont know what is wrong the *txt file?

thanks!
0
 
LVL 3

Expert Comment

by:guadalupe
ID: 2529050
Did you try the solution I sent:

open(OUT, $fname);
print "Open message: $!\n";


What message did it print?

0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 

Author Comment

by:syu1
ID: 2529755
I try it, I got error message like : "no such file or directory found",

 thanks lot!
0
 
LVL 3

Expert Comment

by:guadalupe
ID: 2531068
OK so we know the problem is that some where the directory doesn't exist.  Notice I didn't say the file as perl create non existing files if you call then for write or append access.  But in this case it could create it because it was referenced to a dir which did't exist.
0
 

Author Comment

by:syu1
ID: 2532119
quadalupe:

would you pls explan it again, as   I dont quite follow your last explanation, thanks!
0
 
LVL 3

Accepted Solution

by:
guadalupe earned 50 total points
ID: 2534929
Ok the error message was that:

"no such file or directory found"

You opened the file like this:

$COMMENT_FILE = "/hct_university/she/registrationDir/rs1.txt";

$fname = ">>" . $COMMENT_FILE;

open(OUT, $fname);

the ">>" which you append onto the front of the file name means open the file for appending.  When perl is instructed to open a file for either writing or appending and it does not find the file it will create the FILE!!  Not any directories which may be part of thepath of the file but just the file.  But if the path doesn't exists it will be unable to create ther file and therefore unable to open it...  Therefore if it says the file or diectory doesn't exist it is much more lickly the problem is the dir.  Also if it was a lck of permissions to creat the file in the dir iot would say just that:

Permission denied

Check the spelling and location of the dir...
0

Featured Post

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

I've just discovered very important differences between Windows an Unix formats in Perl,at least 5.xx.. MOST IMPORTANT: Use Unix file format while saving Your script. otherwise it will have ^M s or smth likely weird in the EOL, Then DO NOT use m…
Many time we need to work with multiple files all together. If its windows system then we can use some GUI based editor to accomplish our task. But what if you are on putty or have only CLI(Command Line Interface) as an option to  edit your files. I…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…

808 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question