1

チェックボックスの値を Perl CGI スクリプトに配列として送信する HTML フォームがありました。ただし、サイトは主に PHP を使用して再構築されたため、チェックボックスの配列は別の方法で処理されます。フォームを返す PHP 関数があります。次のようになります。

<td>Profiles: </td>
<td><input type=\"checkbox\" value=\"oneconnect\" name=\"v1-profile[]\">OneConnect <br />
<input type=\"checkbox\" value=\"http\" name=\"v1-profile[]\">HTTP <br />
<input type=\"checkbox\" value=\"xforwardedfor\" name=\"v1-profile[]\">Xforwarded-for</td>
</tr>

次に、これを Perl CGI スクリプトに送信します

use CGI qw(:standard);
my $q = new CGI;
my @profiles1 = $q->param("v1-profile");

配列の要素を印刷しようとすると、出力として「配列」という単語しか表示されません。

foreach my $r (@profiles1) {
print "$r\n";
}

うまくいかないこともいくつか試しました。

foreach my $r (@profiles1) {
foreach my $v (@$r) {
print "$v\n";
}
}

「@profiles1」配列の要素にアクセスするにはどうすればよいですか? お手伝いありがとう!

4

2 に答える 2

2

変数名の末尾[]は PHP 主義です。これは標準ではなく、Perl の CGI モジュール (または実際には PHP 以外のもの) によって特別に扱われることはありません。可能であれば、フォームから削除してください。そうでない場合は、名前に括弧を含めることで、Perl からパラメーターを取得できるはずです。

my @profiles = $q->param("v1-profile[]");
于 2012-07-25T23:17:26.263 に答える
1

あなたの問題が何であるかわかりません。私にとってはうまくいくようです。これが私が作った小さなテストリグです。

test.html:

<html>
  <head>
    <title>Test</title>
  </head>
  <body>
    <h1>Test</h1>
    <form action="/cgi-bin/form">
      <table>
        <tr>
          <td>Profiles: </td>
          <td><input type="checkbox" value="oneconnect" name="v1-profile[]">OneConnect <br />
          <input type="checkbox" value="http" name="v1-profile[]">HTTP <br />
          <input type="checkbox" value="xforwardedfor" name="v1-profile[]">Xforwarded-for<br />
          <input type="submit"></td>
        </tr>
      </table>
    </form>
  </body>
</html>

cgi-bin/フォーム:

#!/usr/bin/perl

use strict;
use warnings;
use CGI;

my $q = CGI->new;

print $q->header(-type => 'text/plain');

my @profiles = $q->param('v1-profile[]');

foreach (@profiles) {
  print "$_\n";
}

そして、私は私が期待するものを正確に見ています。チェックした各チェックボックスが出力に表示されます。

確認することが1つあります。フォームを送信すると、URL はどのように表示されますか? 私はこのように見えます(2つのチェックボックスがチェックされています)。

http://localhost/cgi-bin/form?v1-profile%5B%5D=oneconnect&v1-profile%5B%5D=xforwardedfor

入力名の角括弧が URL エンコードされていることに注意してください。それが起こるべきことです。

問題は、これがあなたのセットアップとどのように違うのかということです。

于 2012-07-26T08:43:53.193 に答える