-1

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

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

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

4

1 回答 1

1

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

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

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

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

您确实必须了解数据库中的所有内容以及提交的所有内容,如果您不想删除所有内容并进行新的插入,请检查两次。你当然可以为你做一个函数,隐藏丑陋一点。想想如果它只有两个数组并且没有数据库,你会怎么做。

于 2012-08-24T09:25:29.603 回答