perl dbi提交复选框值

时间:2012-08-24 06:45:49

标签: forms perl checkbox dbi

我有一个带复选框的表单,我需要知道将它们提交到数据库的最佳方法是什么。我有以下表格设置:

roles    users    user_roles
-----    -----    ----------
id       id       user_id
                  role_id

我有一个页面,您可以通过复选框编辑用户并为其分配不同的角色,然后这些复选框保存在user_roles表中。由于编辑用户的角色可能涉及删除行或添加行,因此我目前正在处理它:

my $form_vals = (1=>1,2=>2); #submitted by user
my $db_vals = (3=>3); #gotten out of db

所以我有这两个哈希值,我会将$form_vals中的键与$db_vals中的键进行比较,然后我看到我有两个额外的值,这些值在数据库中不存在所以我添加他们。反之亦然我通过比较$db_vals中的键和$form_vals中的键,然后从数据库中删除这些行,找到表单上不再选择哪些值。我的问题是,有没有人知道更好/更简单的方法呢?对我来说,如何处理复选框并不是很明显,我想知道最佳实践是什么。谢谢!

1 个答案:

答案 0 :(得分:1)

我不会说这与复选框本身有很大关系。

基本上你拥有的是两个数组数组,[(uid,rid),(uid,rid)],并且你想让array1(数据库中的那个)成为array2的副本(来自的用户输入复选框)。您可以使用多选或逗号分隔的字符串,大小写相同。您有一个用户ID,并且您希望该用户仅提供角色。

实现这一目标的两种方法是

  • 将两个数组分别放在一个哈希中,在提交时执行foreach键,如果数据库中没有,则执行插入操作。然后对数据库哈希执行相同操作并删除提交的哈希中不存在的哈希
  • 从member_role表中删除所有内容并插入已提交的内容。

您真的必须知道数据库中的所有内容以及提交的所有内容,如果您不想删除所有内容并进行全新插入,请检查两次。你当然可以为你做一个功能,隐藏丑陋。想想如果它只是两个数组并且没有数据库就会如何做。