- 论坛徽章:
- 0
|
前几天看了几位前辈讨论CGI传递数组的问题的文章.发现的确好用.
最近写程序希望CGI能传递二维数组,我试过用上面的方法,结果失败.可能是我的用法错误,希望有高手可以指点下.
想了半天,觉得二维数组是否可以把@arr[m][n]的第一个下标放到数组名字里,变成@arrm[n],这样二维数组不就变成一维数组了么.
尝试写了下代码,发现效果不错.
代码写的很难看,只求效果,高手见笑了.
1.pl
#!/usr/bin/perl -w
use CGI;
$q=new CGI;
$n=1;
$m=1;
$num1=6; #定义行数
$num2=8; #定义列数
for $x (1..$num1) { #定义一个一维数组@arr1,@arr2..,每个$arr$x一个数组的引用
$m=1;
$arrstr="arr$x";
@{$arrstr};
for $y (1..$num2) {
${$arrstr}[$y]=10*$n+$m;
$m++;
}
$n++;
}
print $q->header(-charset=>"GB2312"),
$q->start_html(),
$q->start_form(-method=>"post",-action=>"2.pl");
foreach $nn (1..$num1) { #提交数组变量
$arrstr="arr$nn";
print $q->hidden(-name=>"rec$nn",-value=>\@{$arrstr});
print "rec$nn,$arrstr<br>";
}
print $q->hidden(-name=>num,-value=>"$num1");
#将一维数组的个数,即"m"提交给下一页面
foreach $x (1..$num1) { #打印数组
foreach $y (1..$num2) {
$arrstr="arr$x";
print "${$arrstr}[$y] ";
$y++;
}
print "<br>";
$x++;
}
print $q->submit(),
$q->end_form(),
$q->end_html;
|
2.pl
#!/usr/bin/perl -w
use CGI;
$q=new CGI;
print $q->header;
print "Get array from CGI<br>\n";
my $params = $q->Vars;
$num=$q->{'num'};
foreach $x (1..$num) {
$tmp="rec$x";
my @myarray = split "\0", $params->{"$tmp"};
print "@myarray<BR>";
}
print $q->end_html;
|
[ 本帖最后由 dong_kof 于 2008-7-7 15:38 编辑 ] |
|