0

同じ名前で値が異なるラジオ ボタンのセットがあります。選択したラジオボタンの値を取得し、それをプリセット値と比較して一致するかどうかを確認しようとしています。

<input type="radio" name="one" value="a">
<input type="radio" name="one" value="b">
<input type="radio" name="one" value="c">

このフォームを送信しています...

編集

@answers = ("a", "a", "c");

for $key (param()) {
  $input {$key} = param($key);

  if ($key ne "firstName" and $key ne "lastName") {
    $value = "$_\n" for $input{$key};

    #The below values print out correctly.
    #a a
    #a a
    #c c
    print $value . " " . $answers[$i] . "<br/>";

    #When trying to compare them nothing happens.
    if ($value eq $answers[$i]) {
      print "TEST<br/>";
      $avg += 1;
    }
    $i++;
  }
}

そのため、ラジオ ボタンの値を配列にプッシュし、それを配列の回答と比較する必要があります。

4

2 に答える 2

0

1) 常に $value に改行を追加しますが、@answers の値にはそれらがありません。だから絶対に合わない。

2) 特定の順序で値を取得すると仮定します。ある日、別の注文を受けるか、1 つの質問が省略されます。次に、たとえば質問 1 と回答 2 を比較します。

3) 同じパラメーターに複数の値がある場合 (通常はチェックボックスのみの問題)、いくつかの値が失われます。あなた"$_\n" for $input{$key};はそれが正当な懸念であることを暗示しています。ただし、param() の呼び出しとハッシュへのストレージはスカラー コンテキストにあり、常に他の値が削除されます。リスト コンテキストを使用する必要があります (たとえば@values=param($key); $item{$key}=[@values]

于 2012-11-02T20:00:30.143 に答える
0

特定のパラメーターの値を要求できるため、それらを別のハッシュに保存する必要はありません。

my @values = param("one");

次に、スマート マッチを使用して簡単に比較できます。

use v5.10;

if( @values ~~ @answers ) {
    ...they matched...
}

パズルの最後のピースは、キーをパラメータとしてハッシュに答えを保存することです。

my %correct_answers = (
    one => ['a', 'a', 'c'],
    two => [1,2,3],
);

次に、すべてのパラメーターをループして回答フィールドではないものを抽出するのではなく、ユーザーが他に何を送信するかを誰が知っているか (そうです、ユーザーは任意のフィールドを任意の順序で CGI プログラムにフィードできます)、のキーをループして、%correct_answers期待するフィールドのみを確​​認します。

for my $key (keys %correct_answers) {
    my $correct_answer = $correct_answers{$key};

    my @answer = param($key);

    if( @answer ~~ @$correct_answers ) {
        ...they matched...
    }
}
于 2012-11-02T20:03:40.117 に答える