Mysql 使用Perl和PostgreSQL保存复选框选项

Mysql 使用Perl和PostgreSQL保存复选框选项,mysql,perl,postgresql,Mysql,Perl,Postgresql,我正在尝试创建一个用户首选项页面,该页面有一系列复选框,让用户决定如何接收通知。以下是我当前的首选项HTML表单: <form method="post"> <table id="preferences" class = "preferences"> <tr class="headers"> <th class = "preferences">Preference</th> <th class

我正在尝试创建一个用户首选项页面,该页面有一系列复选框,让用户决定如何接收通知。以下是我当前的首选项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>
$Request->Params与CGI->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,运气不太好。如果你能解释一下为什么你也这么做,我会很高兴的

如果您需要更多信息,请告诉我。谢谢你的电话

my $prefs = USystem::UserPrefs->new($user->userid)
创建新对象并从数据库中复制该用户的当前首选项。之后,您可以使用
$prefs->value(value\u name[,new\u value)
访问或更新个人首选项,调用
$prefs->update
将当前值复制回数据库

你已经有了

$prefs->value($USER_PREF_MARKUPTYPE, $form->{default_markup})
在调用之前,您需要添加更多这样的调用来设置其他首选项的值

$prefs->update

要将它们全部保存

您不显示如何定义
$self->{PREFS}
散列(可能在
ussystem::UserPrefs->new
?),但看起来您需要做的就是确保在调用
$prefs->update
之前,其他字段都进入其中。这是真正的代码吗?行
my$dbh=USystem::DB->new
创建一个新的数据库句柄,该句柄在整个块中都未使用,之后会被抛出。我添加了UserPrefs->new,是的,y$dbh=USystem::DB->new,real code其他人是否编写了这部分代码尽管我只是在用新功能更新它我是一个真正的视觉学习者,你能给我一个简单的例子吗?你的答案很好,解释得很好。我的一个问题是Perl脚本如何实际与复选框进行通信以访问它是否被选中?你能解释一下吗请举例说明选中复选框后,
$prefs->value(value\u name[,new\u value)
的效果如何?调用
$form->{default\u markup}
是从表单中获取数据的一个示例。您的复选框名称都是
通知选项,您可能需要更改,但请尝试
$form->{notification option}
要查看你得到了什么,我还需要编辑UserPref->update code吗?因为我接收了更多的东西不,它只是复制了hash中的所有内容。我将其他邮件的名称改为
“others\u post”
,然后我将
$form->{others\u post}
添加到
$prefs->value($USER\u PREF\u MARKUPTYPE,$form->{default\u MARKUPTYPE})
所以我有
$prefs->value($USER\u PREF\u MARKUPTYPE,$form->{default\u MARKUPTYPE},$form->{others\u post})
但是它没有在表中保存或更新它。当我在数据库中手动将表设置为“true”时,在我点击“保存首选项”后,它会返回false按钮
$prefs->update