Arrays 联系人表单正在更改表单数据的顺序
我有一个联系人表单,它使用CGI脚本获取表单数据并通过电子邮件发送。该脚本运行良好,只是它似乎改变了表单元素的顺序。我想我已经找到了导致这种情况的代码块 有没有一种方法可以改变它,这样它就可以按原样发送表单数据,而无需重新排序Arrays 联系人表单正在更改表单数据的顺序,arrays,perl,cgi,Arrays,Perl,Cgi,我有一个联系人表单,它使用CGI脚本获取表单数据并通过电子邮件发送。该脚本运行良好,只是它似乎改变了表单元素的顺序。我想我已经找到了导致这种情况的代码块 有没有一种方法可以改变它,这样它就可以按原样发送表单数据,而无需重新排序 sub get_data { use CGI qw/:standard/; my $query = new CGI; foreach $key ($query->param()){ $data{$key} = $qu
sub get_data {
use CGI qw/:standard/;
my $query = new CGI;
foreach $key ($query->param()){
$data{$key} = $query->param($key);
}
%data; # return associative array of name=value
}
从
如果使用参数列表(例如“name1=value1&name2=value2&name3=value3”)调用脚本,param()方法将以列表形式返回参数名称。如果脚本作为脚本调用,并且包含不带符号的字符串(例如“value1+value2+value3”),则将有一个名为“keywords”的参数,其中包含“+”分隔的关键字
注意:从1.5版开始,返回的参数名称数组的顺序将与浏览器提交的顺序相同。通常,此顺序与表单中定义参数的顺序相同(但是,这不是规范的一部分,因此不能保证)
因此,您可以通过将密钥存储在数组中来保持密钥的顺序
my @ordered = $query->param();
或者根本不使用散列
my @data;
foreach $key ($query->param()){
push @data, [ $key, $query->param($key) ];
}
return @data;
从
如果使用参数列表(例如“name1=value1&name2=value2&name3=value3”)调用脚本,param()方法将以列表形式返回参数名称。如果脚本作为脚本调用,并且包含不带符号的字符串(例如“value1+value2+value3”),则将有一个名为“keywords”的参数,其中包含“+”分隔的关键字
注意:从1.5版开始,返回的参数名称数组的顺序将与浏览器提交的顺序相同。通常,此顺序与表单中定义参数的顺序相同(但是,这不是规范的一部分,因此不能保证)
因此,您可以通过将密钥存储在数组中来保持密钥的顺序
my @ordered = $query->param();
或者根本不使用散列
my @data;
foreach $key ($query->param()){
push @data, [ $key, $query->param($key) ];
}
return @data;
好吧,你把你的参数放到一个散列中。散列没有内在的顺序。以与放入哈希相同的顺序获取哈希的键/值对的唯一方法是保留一个包含键顺序的单独数组
您真的需要散列中的参数吗?在创建电子邮件时,您不能只使用
foreach
循环吗?好吧,您正在将参数放入哈希中。散列没有内在的顺序。以与放入哈希相同的顺序获取哈希的键/值对的唯一方法是保留一个包含键顺序的单独数组
您真的需要散列中的参数吗?您不能在创建电子邮件时使用foreach
循环吗