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


All..
When writing forms within a CGI, can you display the data in
a new clean HTML page, not one after the other
on the page
. Example below.

Program Code
#!/usr/bin/perl use CGI; print $q->header(); printf $q->startform; printf "<h1>CVS User Management</h1><br>"; printf "<P>"; printf "<b>Please select which cvs repository your would like to admin +ister.</b><br><br>"; foreach my $rep (<@reps>) { printf $q->radio_group (-name => 'cvsrep',<nt> -values => [$rep], -linebreak => 't +rue'); } printf "<br>"; printf "<b>Please select the function to use. <br></b><br>"; my @functions = <br>('Register_User','Delete_User','Show_All_U +sers','Reset_Password'); foreach my $func (<@functions>) { printf $q->checkbox_group (-name => 'function',<br> -values => [$func], -linebreak <br>=> 'tr +ue', -defaults => 'other'); } printf "<br>"; printf $q->reset; printf $q->submit ('Submit', 'Submit'); printf $q->endform; %formvals = $q->Vars(); my $repaccess = $formvals{cvsrep}; my $repfunction = $formvals{function}; if($repfunction =~ /Register_User/) {<br> printf $logo; &displayreg($repaccess); } elsif ($repfunction =~ /Delete_User/) { printf $logo; &displaydel($repaccess); } elsif ($repfunction =~ /Show_All_Users/) { printf $logo; &showallusers($repaccess); } elsif ($repfunction =~ /Reset_Password/) { printf $logo; &displayreset($repaccess); } sub displayreg() { printf $q->h1("CVS New User registation for $_[0]"); +# Print Header printf $q->start_form; printf "<br>"; printf "<b>Please enter the details below to register +a new user </b>";print"<br><br>"; printf "<EM>Users Username from GD </EM>"; print $q-> +textfield(-name=>'username',-size=>'20');print"<br><br>"; printf "<EM>Users Email Address </EM>"; print $q->tex +tfield(-name=>'emailaddr',-size=>'30');print"<br><br>"; printf $q->hidden(-name =>'mode',-value=>'regthisuser' +); printf $q->hidden(-name =>'repaccess',-value=>$_[0]); printf $q->submit(-value=>'Submit'); printf " "; printf $q->reset; printf $q->endform; printf "<BR>"; }
Example Page display, would look like
---------------------------------------------
| FORM |
| |
| Selection option: Radio Button |
| Selection option: Check_Box |
| |
| Submit | Reset |
---------------------------------------------|
When a users enter the data and submits the form

----------------------------------------------|
| FORM |
| |
| Selection option: Radio Button |
| Selection option: Check_Box |
| |
| Submit | Reset |
| |
| |
| Enter username: textbox |
| Enter users email address: textbox |
|--------------------------------------------|


So my problem in a bad way of explaining it is, How do
you put it in so that when the users clicks submit on the
first form he/she does not get the data, printed under
the form they submitted from, but rather a fresh
html page....

Edit castaway - added readmore tags

Replies are listed 'Best First'.
Re: CGI form on click new window display
by edoc (Chaplain) on Jan 31, 2005 at 12:12 UTC

    Maybe I'm just confused, but I think you're basically there. Just move your form to another display function..

    #!/usr/bin/perl use CGI; print $q->header(); %formvals = $q->Vars(); my $repaccess = $formvals{cvsrep}; my $repfunction = $formvals{function}; if($repfunction =~ /Register_User/) {<br> print $logo; &displayreg($repaccess); } elsif ($repfunction =~ /Delete_User/) { print $logo; &displaydel($repaccess); } elsif ($repfunction =~ /Show_All_Users/) { printf $logo; &showallusers($repaccess); } elsif ($repfunction =~ /Reset_Password/) { printf $logo; &displayreset($repaccess); } else { displayform(); } sub displayform{ printf "<h1>CVS User Management</h1><br>"; printf "<P>"; printf "<b>Please select which cvs repository your would like to adm +inister.</b><br><br>"; foreach my $rep (<@reps>) { printf $q->radio_group (-name => 'cvsrep',<nt> -values => [$rep], -linebreak => 'true'); } printf "<br>"; printf "<b>Please select the function to use. <br></b><br>"; my @functions = ('Register_User','Delete_User','Show_All_Users','Res +et_Password'); foreach my $func (<@functions>) { printf $q->checkbox_group (-name => 'function',<br> -values => [$func], -linebreak <br>=> 'true', -defaults => 'other'); } print "<br>"; print $q->reset; print $q->submit ('Submit', 'Submit'); print $q->endform; } sub displayreg { ... }

    cheers,

    J

      J

      THanks for the update, i tried your method and the first
      part of the code works, and i get the first form asking for
      information. When i try and submit the data to bring up the
      displayreg() code, i get an error
      , it is almost like the server does not know what i am talking about.
      The debug just says error 500.... i am not sure about this method.
        minixman, The "method" displayreg() is responsible to display in the browser ... Try to write this method ; Regards, Toxa.

        That's a server error which means your script is failing. Make sure you have the following at the top of your code:

        #!/usr/bin/perl use strict; use warnings;

        then run your script and check your error logs. The logs should tell you what the problem is.

        cheers,

        J