1

私は新しい支払い処理業者を使用していますが、そのデータシートには、情報が多次元配列として投稿されていると単純に書かれています。いくつかの変数を引用すると、次のようになります。

products[x][prod_number]
products[x][prod_name]
products[x][prod_type]

** そのような配列は 10 個あります

人が3つのアイテムを注文した場合、Xが[0]、[1]、[2]になることを意味する「item_count」という変数があることを発見しました

しかし、この POST されたデータを読み込んで分離する方法は何ですか。確かにある種の「foreach」ループになるでしょうが、必要な変数名は謎です

通常の変数、つまり「名前/値」のペアを取得するには、これを使用します。

use CGI qw/:standard/;

@names=param;
foreach $name(@names){
$value=param($name);
$$name=$value;
}

ポインタはありますか?

+++++

これがこの投稿に追加する正しい方法かどうかはわかりません。システムはまだまだ勉強中です

私の質問は、このデータがSTDINなどに投稿された形式は何ですか。それ以上に、何に読み込まれるのでしょうか。"products" は単一の変数名であるため、すべてのデータは単一の "$products" 変数内にあるのでしょうか、それともすべてのデータが @products 内に含まれているのでしょうか?

4

3 に答える 3

2
my $num_items = $cgi->param('item_count');

my @ordered_prods;
for my $ordered_prod_num (1..$num_items) {
   my %ordered_prod;
   for my $field_name (qw( prod_number prod_name prod_type )) {
      $ordered_prod{$field_name} =
         $cgi->param("products[$ordered_prod_num][$field_name]");
   }

   push @ordered_prods, \%ordered_prod;
}

または、考え直して、

my @ordered_prods;
for my $param_name ($cgi->param()) {
   if (
      my ($ordered_prod_num, $field_name) =
         $param_name =~ /^products\[([0-9]+)\]\[(\w+)\]\z/
   ) {
      $ordered_prods[$ordered_prod_num]{$field_name} =
         $cgi->param($param_name);
   }
}
于 2013-10-22T15:29:06.620 に答える
0

CGI パラメータを受け取るより良い方法:

ハッシュリファレンス:

my $params = { map { $_ => ($cgi->param($_))[0] } $cgi->param };

ストレートハッシュ:

my %params = map { $_ => ($cgi->param($_))[0] } $cgi->param; 

またはモンクモード;)

sub Vars { 
    my $q = shift; 
    my %in; 
    tie(%in,CGI,$q); 
    return %in if wantarray; 
    return \%in; 
} 
于 2013-10-22T15:32:38.970 に答える