Perl脚本无法检索复选框值

Perl脚本无法检索复选框值,perl,Perl,我在同一个文件中有以下Perl sub- 填充: sub __populate { my $self = shift; my $sth = $self->{dbh}->prepare("select prefid, value, others_posts from user_preferences where userid=?"); $sth->execute($self->userid); while(my $href = $sth-&

我在同一个文件中有以下Perl sub-

填充:

sub __populate {
    my $self = shift;

    my $sth = $self->{dbh}->prepare("select prefid, value, others_posts from user_preferences where userid=?");
    $sth->execute($self->userid);
    while(my $href = $sth->fetchrow_hashref()) {
        $self->value($href->{PREFID}, $href->{VALUE}, $href->{OTHERS_POSTS});
    }
    $sth->finish();
}
更新:

sub update {
    my $self = shift;

    my $sth = $self->{dbh}->prepare("delete from user_preferences where userid=?");
    $sth->execute($self->userid);
    $sth->finish;
    $sth = $self->{dbh}->prepare("insert into user_preferences(userid, prefid, value, others_posts ) values(?, ?, ?, ?)");
    while(my ($prefid, $value, $others_posts) = each %{$self->{PREFS}}) {
        $sth->execute($self->userid, $prefid, $value, 'true');
    }
    $sth->finish;
}
和价值:

sub value {
    my $self = shift;
    my $prefid = shift;
    $self->{PREFS}->{$prefid} = shift if(@_);
    return $self->{PREFS}->{$prefid};
}

最初它只是
前缀
,但我只是将
其他帖子
添加到
填充
更新
子目录中。问题是,它似乎没有为我刚才添加的
其他帖子
返回任何内容。每次脚本运行时,
OTHERS\u POSTS
的值都不会插入到表中。我认为问题在于我的
value
sub,但我对Perl非常熟悉,不知道如何修改它,以便提取
其他帖子的值。

$self->{PREFS}
是一个最初有
前缀=>value
对的散列

如果要在该散列中存储
其他帖子
,请修改:

sub value {
    my ($self,$prefid,$value,$otherposts) = @_;

    # set
    if( ! defined($value)) {
        $self->{PREFS}->{$prefid} = "$value|$otherposts";
    }

    return $self->{PREFS}->{$prefid};
}
更新的新版本:

sub update {
    my $self = shift;

    my $sth = $self->{dbh}->prepare("delete from user_preferences where userid=?");
    $sth->execute($self->userid);
    $sth->finish;
    $sth = $self->{dbh}->prepare("insert into user_preferences(userid, prefid, value, others_posts ) values(?, ?, ?, ?)");
    for my $prefid (keys %{$self->{PREFS}}) {
        my ($value,$others_posts) = split '\|', $self->{PREFS}->{$prefid};
        $sth->execute($self->userid, $prefid, $value, $others_posts);
    }
    $sth->finish;
}

问题是您已经将每个首选项从简单的键/值对(前缀/值)更改为每个键都有两个值(值和其他属性)。需要相应地更改数据结构以支持这一点

所以每个带前缀的键都需要一个包含VALUE的散列&OTHERPOSTS条目和相关值

这方面的变化包括:

sub update {
    my $self = shift;

    my $sth = $self->{dbh}->prepare("delete from user_preferences where userid=?");
    $sth->execute($self->userid);
    $sth->finish;
    $sth = $self->{dbh}->prepare("insert into user_preferences(userid, prefid, value, others_posts ) values(?, ?, ?, ?)");
    while(my ($prefid, $pref) = each %{$self->{PREFS}}) {
        $sth->execute($self->userid, $prefid, $pref->{VALUE}, $pref->{OTHERSPOSTS});
    }
    $sth->finish;
}

sub value {
    my ($self,$prefid,$value,$othersposts) = @_;
    $self->{PREFS}->{$prefid} = { VALUE => $value , 
                                  OTHERSPOSTS => $othersposts };
    return $self->{PREFS}->{$prefid};
}
__填充()不需要更改,因为您已经将额外的参数传递给value()


由于无法实际运行此程序,因此可能会出现一些syntex错误,但希望您能理解。

对不起,我是一名非常直观的学习者,对Perl还相当陌生。你能举个例子吗?