我正在尝试创建一个用户首选项页面,其中包含一系列复选框,让用户决定他们希望如何接收通知。这是我当前的偏好HTML表单:
<form method="post">
<table id="preferences" class = "preferences">
<tr class="headers">
<th class = "preferences">Preference</th>
<th class = "preferences">Value</th>
<th class = "preferences">Notification Preferences</th>
</tr>
<tr>
<td class = "preferences">Default Post Markup</td>
<td class = "preferences">
<select name="default_markup">
<% foreach(USystem::Markup->markup_types) {
print Usystem::Utils::option_tag($_->{id}, $_->{name}, $prefs->value(1));
} %>
</select>
</td>
<td>
<input type = "checkbox" name = "notification-option" id = "all-post"> All Posts <br/>
<input type = "checkbox" name = "notification-option" id = "others-post"> Other's Posts <br/>
<input type = "checkbox" name = "notification-option" id = "client-post"> Cilent's Post <br/>
<input type = "checkbox" name = "notification-option" id = "assign-post"> Task Assigned
</td>
</tr>
<tr>
<th colspan="3" class="submitrow"><input type="submit" name="submit" value="Save Preferences" /></th>
</tr>
</table>
</form>
我刚刚添加了4个复选框,我需要帮助将它们保存到数据库中,我使用布尔值来确定它们是否被选中。
在选择“保存首选项”按钮时运行的HTML页面上的My Perl脚本:
my $form = $Request->Params;
my $prefs = USystem::UserPrefs->new($user->userid);
if($Request->{Method} =~ /POST/i) {
my $dbh = USystem::DB->new;
if($form->{submit} eq "Save Preferences") {
$prefs->value($USER_PREF_MARKUPTYPE, $form->{default_markup});
$prefs->update;
}
$Response->Redirect('/preferences');
}
$ Request-&gt; Params与CGI-&gt; Params()
基本相同这是UserPrefs:
package USystems::UserPrefs;
use strict;
use USystems::DB;
sub new {
my $self = shift;
my $class = ref($self) || $self;
my $userid = shift;
$self = bless {}, $class;
$self->{dbh} = USystems::DB->new;
if($userid) {
$self->userid($userid);
$self->__populate;
}
return $self;
}
sub __populate {
my $self = shift;
my $sth = $self->{dbh}->prepare("select prefid, value from user_preferences where userid=?");
$sth->execute($self->userid);
while(my $href = $sth->fetchrow_hashref()) {
$self->value($href->{PREFID}, $href->{VALUE});
}
$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) values(?, ?, ?)");
while(my ($prefid, $value) = each %{$self->{PREFS}}) {
$sth->execute($self->userid, $prefid, $value);
}
$sth->finish;
}
sub userid {
my $self = shift;
$self->{USERID} = shift if(@_);
$self->{USERID};
}
sub value {
my $self = shift;
my $prefid = shift;
$self->{PREFS}->{$prefid} = shift if(@_);
return $self->{PREFS}->{$prefid};
}
1
如何存储是否选中复选框的值以及更新当前的Perl脚本以接收值。我对Perl很陌生并没有太多运气。如果你能解释为什么你做了你也做了什么,我会很高兴。
如果您需要更多信息,请告诉我。感谢
答案 0 :(得分:2)
该行
my $prefs = USystem::UserPrefs->new($user->userid)
创建一个新对象,并从数据库中复制该用户的当前首选项。之后,您可以使用$prefs->value(value_name [, new_value)
访问或更新个人偏好设置,并且对$prefs->update
的调用会将当前值复制回数据库
你已经拥有
$prefs->value($USER_PREF_MARKUPTYPE, $form->{default_markup})
你需要在调用
之前添加更多这样的调用来设置其他首选项的值$prefs->update
全部保存