联系表格正在改变表格数据的顺序

时间:2014-09-23 12:47:42

标签: arrays perl cgi

我有一个联系表单,它使用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
}

2 个答案:

答案 0 :(得分:4)

来自perldoc CGI

  

如果使用参数列表调用脚本(例如“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;

答案 1 :(得分:0)

嗯,您将参数放入哈希值。哈希没有内在的顺序。以与放入它们相同的顺序获取散列的键/值对的唯一方法是保持包含键的顺序的单独数组。

你真的需要哈希中的参数吗?在您创建电子邮件时,您是否只能使用foreach循环?