Perl - cgi-lib.pl

Hi,

I have a form with a list of checkboxes.
The user checks a number of boxes and clicks submit.
I want to display the values of what's being selected.

I'm using cgi-lib.pl in my script but can't seem to separate the values being submitted.
I'm using the following HTML

<FORM METHOD=POST ACTION=/cgi-bin/myscript.pl>

<INPUT TYPE="checkbox" VALUE="apples" NAME="fruit"></TD><TD>APPLES</TD><TR>
<INPUT TYPE="checkbox" VALUE="oranges" NAME="fruit"></TD><TD>ORANGES</TD><TR>
<INPUT TYPE="checkbox" VALUE="lemons" NAME="fruit"></TD><TD>LEMONS</TD><TR>

I'm using the following PERL:-

require "cgi-lib.pl";
&ReadParse(*input);
$in = $input{'fruit'};
@in = split(/&/,$in);

If use print $in[0] I get "applesorangeslemons" and get nothing if I use $in[1].

What am I doing wrong?

Thanks,

Andy

contextAsked:
Who is Participating?
 
moonlxCommented:
use CGI qw/:standard/;
my $query = new CGI;
print $query->header();
<TABLE>
<FORM METHOD=POST ACTION=/cgi-bin/myscript.pl>

<INPUT TYPE="checkbox" VALUE="apples" NAME="apples"></TD><TD>APPLES</TD><TR>
<INPUT TYPE="checkbox" VALUE="oranges" NAME="oranges"></TD><TD>ORANGES</TD><TR>
<INPUT TYPE="checkbox" VALUE="lemons" NAME="lemons"></TD><TD>LEMONS</TD><TR>

#the action (myscript.pl)

use CGI qw/:standard/;
my $query = new CGI;
print $query->header();
print "<HTML><HEAD></HEAD><BODY>";
if($query->param('apples') eq "apples")
{
    print $query->param('apples')."\n";
}
if($query->param('oranges')q "oranges")
{
    print $query->param('oranges');
}
if($query->param('lemons')q "lemons")
{
    print $query->param('lemons');
}

print "</BODY></HTML>";
0
 
makerpCommented:
use cgi.pm. its so easy ..........
0
 
makerpCommented:
yoiu have given all of the check boxes the same name. yoiu shouldnt do that, they cannt be grouped like radio buttons
0
Cloud Class® Course: Certified Penetration Testing

This CPTE Certified Penetration Testing Engineer course covers everything you need to know about becoming a Certified Penetration Testing Engineer. Career Path: Professional roles include Ethical Hackers, Security Consultants, System Administrators, and Chief Security Officers.

 
contextAuthor Commented:
Yep, used cgi.pm and it worked.
Still, thought I could use checkboxes with the same name.

Anyway, thanks.
0
 
windfallCommented:
Hello-
I have used  check boxes with the same name  this way in some of my cgi scripts:

<TABLE>
<FORM METHOD=POST ACTION=/cgi-bin/z_fruitsample.pl>
<TR><INPUT TYPE="checkbox" VALUE="apples" NAME="fruit"></TD><TD>APPLES</TD></TR>
<TR> <TD><INPUT TYPE="checkbox" VALUE="oranges" NAME="fruit"></TD>
<TD>ORANGES</TD></TR>
<TR> <TD><INPUT TYPE="checkbox" VALUE="lemons" NAME="fruit"></TD><TD>LEMONS</TD><TR>
<TR> <TD><input TYPE="submit" VALUE="run it"></TD><TR>
</FORM>
</TABLE>
***********************************************************
Use CGI.pm
place in array
***********************************************************
#c:\perl\bin\perl

########################################
#This script is called:z_fruitsample.pl
use CGI qw/escape unescape/;
$query = new CGI;
@fruit=$query->param("fruit");
#send MIME and HTML headers
print $query->header("-nph=>1");
print $query->start_html(-title => 'sample');

foreach $i(@fruit){
print "$i<BR>";
}

print $query->end_html;

************************************************************
0
 
maneshrCommented:
"If use print $in[0] I get "applesorangeslemons" and get nothing if I use $in[1]. ..."


whenever you use elements with the same name the return value is sent as an array. the checkbox you have used is a very good example of this.

all that you need to to is change the foll lines.

$in = $input{'fruit'};
@in = split(/&/,$in);

TO...


@in = $input{'fruit'};

Hope that helps
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.