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

I have my second Perl program and it deals with making a webpage with CGI and html. We have to use checkboxes for a certain part of the program. How do I retrieve the parameters from those checkboxes? My example is a little abbreviated

Example Code

#!/usr/bin/perl #cgi lib, no need to parse form use strict; use warnings; use CGI qw(:standard); print header(); print start_html("Available Classes"); print"<form action=\"EnrollStudentPL.cgi\" method=\"POST\">"; my $infile ="/home/ajb004/public_html/arabic.txt"; open(InStream, "$infile") or die$!; while(<InStream>) { s/_/ /g; my @word = split(','); my $word; print"<input type=\"checkbox\" name=\"$word[0]\" value=\"on\"> $word[ +0]<br>"; print"$word[1] <br>"; print"$word[2] <br>"; print"$word[3] <br>"; } close (InStream) or die$!; print"<table border=\"0\">"; print"<tr>"; print" <td> Enter your University ID number: </td>"; print" <td><input type=\"text\" size=\"20\" name=\"ID\"></td>"; print"</tr>"; print"</table>"; print"<input type=\"submit\" value=\"Enroll\">"; print end_html();

I know how to retrieve the text parameter from the ID number box, however I can't find how to retrieve the parameters for the checkboxes (I have more than one) so I can use if/else statements in order to alter database text file so I can increase the number of students listed as enrolled in those classes. What I'm looking for is the CGI code that allows me to use only the boxes that were checked. Please help!

Replies are listed 'Best First'.
Re: Retrieving Check Box Parameters
by wind (Priest) on Apr 28, 2011 at 01:30 UTC
    As documented in CGI
    my $checkbox = param($word[0]);
    Note: You should use qq instead of "" for your strings anytime that double quotes will be enclosed in the value. Saves you from having to escape them:
    #!/usr/bin/perl #cgi lib, no need to parse form use strict; use warnings; use CGI qw(:standard); print header(); print start_html("Available Classes"); print qq{<form action="EnrollStudentPL.cgi" method="POST">}; my $infile = "/home/ajb004/public_html/arabic.txt"; open my $fh, $infile or die $!; while (<$fh>) { s/_/ /g; my @word = split ','; print qq{<input type="checkbox" name="$word[0]" value="on"> $word[ +0]<br>}; print qq{$word[1] <br>}; print qq{$word[2] <br>}; print qq{$word[3] <br>}; } close $fh or die $!; print qq{<table border="0">}; print qq{<tr>}; print qq{ <td> Enter your University ID number: </td>}; print qq{ <td><input type="text" size="20" name="ID"></td>}; print qq{</tr>}; print qq{</table>}; print qq{<input type="submit" value="Enroll">}; print end_html();

      I don't understand my $checkbox = param($word[0]). Let's say I've just hit the submit button and I'm in EnrollStudentsPL.cgi. I'm trying to use if else statements so that I can say "if arabic was checked then do this/ else do nothing". Using $word[0] as the parameter doesn't work because I'm using a subroutine to make each checkbox for over 15 classes. I've tried tried to use things such as "my $checkbox = param('ARAB_1016') (ARAB_1016 is what $word[0] would be equal to on its first pass through the subroutine) and then using if $checkbox.length > 0 to see if it was checked (that was recommended by an online source I found) however nothing I've tried to that effect works, and was wondering what the actual syntax I would need to use in "EnrollStudentsPL.cgi" so that I could see which of the classes was checked.

        Since you're using dynamic keys, you'll have to pull those keys when the user does a post to your form

        #!/usr/bin/perl #cgi lib, no need to parse form use strict; use warnings; use CGI qw(:standard); my $infile = "/home/ajb004/public_html/arabic.txt"; print header(); print start_html("Available Classes"); if (request_method() eq 'POST') { open my $fh, $infile or die $!; while (<$fh>) { s/_/ /g; my @word = split ','; my $result = param($word[0]) ? 'checked' : 'not checked'; print qq{$word[0]: $result<br>}; } close $fh or die $!; } else { print qq{<form action="EnrollStudentPL.cgi" method="POST">}; open my $fh, $infile or die $!; while (<$fh>) { s/_/ /g; my @word = split ','; print qq{<input type="checkbox" name="$word[0]" value="on"> $w +ord[0]<br>}; } close $fh or die $!; print qq{<input type="submit" value="Enroll">}; } print end_html();
Re: Retrieving Check Box Parameters
by luis.roca (Deacon) on Apr 28, 2011 at 02:26 UTC

    "I can't find how to retrieve the parameters for the checkboxes (I have more than one) so I can use if/else statements in order to alter database text file so I can increase the number of students listed as enrolled in those classes. What I'm looking for is the CGI code that allows me to use only the boxes that were checked."

    The examples from the CGI 101 book's website may be too simple for your needs but...

    #!/usr/bin/perl use warnings; use strict; use diagnostics; use CGI qw(:standard); use CGI::Carp qw(warningsToBrowser fatalsToBrowser); print header; print start_html; my @colors = ("red", "green", "blue", "gold"); foreach my $color (@colors) { if (param($color)) { print "You picked $color.<br>\n"; } } print end_html;

    Swap @colors for @students :)


    "...the adversities born of well-placed thoughts should be considered mercies rather than misfortunes." — Don Quixote