比较Perl中input元素的值

时间:2012-11-02 19:01:18

标签: html perl comparison

我有一组具有相同名称但值不同的单选按钮。我正在尝试获取所选单选按钮的值,并将其与预设值进行比较,以查看它们是否匹配。

<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++;
  }
}

所以我需要将单选按钮的值压入我的数组,然后将其与数组答案进行比较。

2 个答案:

答案 0 :(得分:0)

1)你总是使用换行符来换取$ value,但@answers中的值都没有。所以这永远不会匹配。

2)您假设您将按特定顺序获取值。有一天你会得到一个不同的订单,或者一个问题将被省略。然后你将比较例如问题1回答2.

3)如果同一参数有多个值(通常只是复选框的问题),则会丢失一些值。你的"$_\n" for $input{$key};暗示这是一个合理的担忧。但是您将param()和存储调用到散列中是在标量上下文中,这将始终丢弃其他值。您需要使用列表上下文(例如@values=param($key); $item{$key}=[@values]),但这需要在其他地方进行额外的工作来检查每个值,无论它是标量还是列表引用。

答案 1 :(得分:0)

您可以ask for the values of a specific parameter,因此无需将它们存储在单独的哈希中。

my @values = param("one");

然后使用smart match进行比较很简单。

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...
    }
}