in reply to Trying to write a CGI script for this piece of HTML

I'm not sure I understand the question (BTW where is it?). But at least I can help you with some red flags in your script.

First of all always use strict mode and warnings in Perl. It means your scripts should start with

#!/usr/bin/perl -w use strict;

It forces you to declare all variables you are using with my. See also perldoc strict. It helps to catch a lot of errors in Perl code.

Second of all don't reinvent the wheel. Don't try to parse query params yourself - chances are that you doing it wrong. Reuse existing code. That is CGI.pm.

Instead of

$form_data = $ENV{'QUERY_STRING'}; $form_data =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C",hex ($1))/eg; # Replace the + char with space char. $form_data =~ s/\+/ /g; # Split $form_data into name/value pairs @fields = split (/&/, $form_data); # Init script variables with form data values # $form_name is the name from the form. # from the text fields... ($form_name, $candidate) = split (/=/, $fields[0]); ($form_name, $position) = split (/=/, $fields[1]); ($form_name, $education) = split (/=/, $fields[2]);

you should have something like

use CGI; my $q = new CGI; my $candidate = $q->param('candidate'); my $position = $q->param('position'); my $education = $q->param('education');

Let's move further

$form_name > dataform.html

You can't write data into file this way. Read perldoc perlopentut for info how you can open files and read from/write to them.

Probably you need something like:

open(OUT, "> dataform.html") or die "Can't open file: $!"; print "Candidate: $candidate\n"; print "Position: $position\n"; print "Education: $Education\n\n"; close OUT;

This writes submited data into dataform.html. Probably you need to adjust format.

Well, I hope I gave enough info to do some homework (i.e. reading docs).

Replies are listed 'Best First'.
Re: Re: Trying to write a CGI script for this piece of HTML
by villa (Initiate) on Nov 28, 2001 at 22:12 UTC
    Greetings Ilyam,
    I was able to implement yesterday your recommandation on the part section script: open(OUT, "> dataform.html") or die "Can't open file: $!"; print "Candidate: $candidate\n"; print "Position: $position\n"; print "Education: $Education\n\n"; close OUT; It creates the file but when I view it there are no contents. What do's the OUT command do? I'm learning a bit more and I tried other command lines like
    open(FH, ">> $path"); sysopen(FH, $path, O_APPEND); # but this one gives me an error:(
    I'm trying to write code to capture the values from a URL address line + and have them sent to a file to be entered and appended for me to view later. The below code is what I'm trying to debug,because I can't get these v +alues "John,Technician & BSdegree" from the following URL string "candidate=John&position=Technician&educ +ation=BSdegree" to get added to the dataform.html file. This script creates the file "dataform.html file" but no values are co +ntained... Any ideas or more perl wisdom:)
    #!/usr/bin/perl -w use strict; sub url_decode { # capture the values from the URL command line my $text = shift(); $text =~ tr/\+/ /; # substitute the + for spaces $text =~ s/%([a-f0-9][a-f0-9])/chr( hex( $1 ) )/eg; # clean up URL + string use CGI; # set my paramenters my $q = new CGI; my $candidate = $q->param('candidate'); my $position = $q->param('position'); my $education = $q->param('education'); # send the values from my URL command line to the dataform.html to be +added and appended: open(OUT, "> dataform.html") or die "Can't open file: $!"; print "Candidate: $candidate\n"; print "Position: $position\n"; print "Education: $Education\n\n"; close OUT;
      OUT is not a command. It is a name of filehandle. First of all you should open file. Once you have created file you get a filehandle which allows you to do various operations with file. See perldoc open.
      open(OUT, "> dataform.html") or die "Can't open file: $!";
      This code opens 'dataform.html' for write and assigns filehandle to OUT.

      Once file is opened you can write into it using filehandle OUT. You can use print to do it but you should pass it filehandle.

      print OUT "Whatever you want";
      Note that there is no comma between OUT and message you are writting into the file.

      Once you have finished writting the file you should close filehandle.

      close OUT;