Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 联系人表单正在更改表单数据的顺序_Arrays_Perl_Cgi - Fatal编程技术网

Arrays 联系人表单正在更改表单数据的顺序

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

我有一个联系人表单,它使用CGI脚本获取表单数据并通过电子邮件发送。该脚本运行良好,只是它似乎改变了表单元素的顺序。我想我已经找到了导致这种情况的代码块

有没有一种方法可以改变它,这样它就可以按原样发送表单数据,而无需重新排序

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
循环吗