Perl脚本无法检索复选框值
我在同一个文件中有以下Perl sub- 填充: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-&
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还相当陌生。你能举个例子吗?