Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I have some code here, what I want it to do is take data from 2 text boxes and then copy that data into a text file...when I do this the only output I get in the text boxes are a rectangle, a comma and another rectangle...

Thanks for the help!

Gono

sub save_information { read(STDIN, my $buffer,$ENV{'CONTENT_LENGTH'}); $buffer =~ tr/+/ /; $buffer =~ s/\r/ /g; $buffer =~ s/\n/ /g; my %formdata; my @pairs = split(/&/,$buffer); foreach my $pair(@pairs){ my ($key,$value) = split(/=/,$pair); $formdata{$key} .= "$value"; } my $text1 = $formdata{param('text1')}; my $text2 = $formdata{param('text2')}; open(INFO, ">>testing123.txt"); # Open for appending print INFO "$text1 , $text2\n"; close (INFO); print <<END; <HTML> <BODY> <P><H1><B>Thank you for saving your file...</B></H1><P> </BODY> </HTML> END }

20040318 Edit by Corion: Fixed formatting, added code tags

20040318 Edit by Corion: Changed title from 'Question'

Replies are listed 'Best First'.
Re: CGI Question: Getting and saving form parameters
by tcf22 (Priest) on Mar 18, 2004 at 16:30 UTC
    Well if you are using param() from the CGI module, then readin the POST data will probably screw something up. Try this:
    use CGI qw( param ); ... sub save_information { my $text1 = param('text1'); my $text2 = param('text2'); open(INFO, ">>testing123.txt"); # Open for appending print INFO "$text1 , $text2\n"; close (INFO); print <<END; <HTML> <BODY> <P><H1><B>Thank you for saving your file...</B></H1><P> </BODY> </HTML> END }
    If that doesn't fix it, then post your HTML form that is doing the submitting and the problem could be in there.

    - Tom

Re: CGI Question: Getting and saving form parameters
by tinita (Parson) on Mar 18, 2004 at 18:29 UTC
    the author of CGI.pm knew that people want to do exactly what you're trying to do, so there's no need to do it yourself.
    use CGI (); my $q = new CGI; open FILE, ">>testing123.text" or die $!; # error checking is importan +t! always! $q->save(FILE); close FILE;
    and you're done! no need to do that parsing and stuff yourself.
    if you really only want two specific form fields and your own format, then please use the CGI::param method, as it is working correctly and will decode the values for you.
    if you don't want to decode the values, then, please provide more info like input data and output (rectangle is not really a rectangle but it means an unprintable character. use an editor to find out which character it is.)
Re: CGI Question: Getting and saving form parameters
by ambrus (Abbot) on Mar 18, 2004 at 16:34 UTC

    What does the param function do here? Is it the param function from CGI.pm or is it defined somewhere in your code? If so, could you please include its code, the error may be there.

      Hi,

      FWIW as a novice I'm doing something like this:

      use CGI; $qw =new CGI; my $text1 = $qw->param('text1'); my $text2 = $qw->param('text2'); #and on and on ####Insert validation so you don't put dangerous code into your file #stuff all of the text you want to print out into one variable and for +mat into nice Perl my $pageoutput = "\$text1 = \"$text1\"\; \$text2 = \"$text2\"\;1;"; open(INFO, ">>testing123.txt"); # Open for appending print INFO "$pageoutput"; close (INFO);
      Then you can just require this into another script.

      Hope this helps.

      Best wishes

      Sid