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

Hi Monks

I have a question regarding passing parameters in CGI perl scripts.

I want to pass the parameter 'oldtable' to a script from the URL, using http://www.foo.bar?oldtable=foo.
If the user doesn't pass the oldtable parameter, the script should exit.
I also want this parameter to take the value 0 when I press a separate button, called 'search'.

To do this, I have used the following code (missing out the non-relevant bits):

#!/usr/bin/perl -w use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); if (param('oldtable')){$oldtable=param('oldtable');} else {die 'This document must be opened with the oldtable parameter';} print start_html(-title=>foo, -BGCOLOR=>bar, -style=>{'src'=>foo,'title'=>bar}); print start_form, radio_group(-name=>'sortby',values=>['Sort by foo', 'Sort by bar']),p, submit(-name=>'search',-value=>'Search'), print end_form; if ($oldtable==1){foo;} if (param('search')) {param(-name=>'oldtable',-value=>'0'); bar; }

However, when I press the 'Search' button, I exit with the error 'This document must be opened with the oldtable parameter'. So how do I do this from within the Perl script?

TIA

CJ

Replies are listed 'Best First'.
Re: passing parameters
by derby (Abbot) on Jul 26, 2005 at 17:58 UTC

    think about truth, falsehood and definedness.

    -derby
Re: passing parameters
by ikegami (Patriarch) on Jul 26, 2005 at 18:05 UTC

    Use a hidden field:

    #!/usr/bin/perl -w # fatalsToBrowser as early as possible. use CGI::Carp qw(fatalsToBrowser); use strict; # You really should! # Load other modules. use CGI qw(:standard); my $oldtable = param('oldtable'); if (not defined $oldtable) { # XXX CGI script shouldn't die; # They should return an HTTP error # with an HTML error message to the # client. die("This document must be opened with the oldtable parameter\n"); } print start_html( -title => foo, -BGCOLOR => bar, -style => { 'src' => foo, 'title' => bar }), start_form, radio_group( -name => 'sortby', -values => [ 'Sort by foo', 'Sort by bar' ]), p, hidden(-name => 'oldtable' -value => '0', -override => 1), submit(-name => 'search', -value => 'Search'), end_form; if ($oldtable) { foo; } else { bar; }
      Thanks very much, folks

      Problemo solved.