PHP / MySQL - 更新数据库中的复选框选择

时间:2013-10-24 12:13:07

标签: php mysql

基本上我有一个包含多个复选框(属于同一组)的表单,这些是类别选择。

当用户想要更新他们的选择时,他们可以查看此表单 - 已经选中了CURRENT选项。

然后,用户更改其选择并提交表单。我现在需要在数据库中更新这些选择。这是我目前的代码:

// $old_selections contains an ARRAY of IDs - I use this to pre-select the checkboxes
$old_selections = Listing::getSelections();

if(isset($_POST['update']))
{
        // $_POST['selections'] is an ARRAY of posted IDs
        $new_selections = $_POST['selections'];

        foreach($new_selections as $selection)
        {
                // insert a new record using $selection
        }
}

因此,目前这会将新选择添加到数据库,但不会删除任何现有选择。理想情况下,这应该有点聪明 - 而不是仅删除所有现有条目,它应该比较两个数组并根据需要删除/插入。

此外,如果用户取消选中所有选项,则显然需要删除所有现有条目。

实现这一目标的最有效方法是什么?

3 个答案:

答案 0 :(得分:1)

补充@ManZzup回答。

提交表单时,更新可以这样完成:

// You no longer need this
// $old_selections = Listing::getSelections();

if(isset($_POST['update']))
{
    // $_POST['selections'] is an ARRAY of posted IDs
    $new_selections = $_POST['selections'];

    $list;
    foreach($new_selections as $selection)
    {
        $list .= $selection + ",";
    }
    $list = substr($list, 0, strlen($list));

    $query = "DELETE FROM tablename WHERE selection_id NOT IN (" . $list .") AND user_id = " . $id;
    mysqli_query($con, $query);

    foreach($new_selections as $selection)
    {
        $query = "INSERT INTO tablename VALUES (" . $id . "," . $selection . ")";
        mysqli_query($con, $query);
    }
...
}

尝试这样的事情。

答案 1 :(得分:0)

在这种情况下,我通常有一个单独的表,其中包含UserID,SelectionID和'Y'或'N' - 甚至更简单地丢弃Y / N位并假设是否有用户/选择对的记录然后他们已经打勾了,如果不是,他们没有。

我删除用户x的所有记录,当他们更新并写入新记录时。没有必要检查记录是否已经存在..

如果选项很简单,你甚至可以只在用户的记录中存储一个字符串 - 也许用一个|分隔id。或类似的,所以很容易分开。我再次覆盖了记录。

如果您需要以相反的方式访问数据,我更喜欢第一种方法 - 例如,此处'找到所有选择了选项x的用户' - 使用表格解决方案很容易。此外,如果您将来删除其中一个选项,您可以轻松地从表中删除具有该ID的所有记录。

答案 2 :(得分:0)

稍微更改表结构

有一个单独的表来存储选择详细信息 例如:

selection_id selection_name
1            New Selection

和另一个表,以保持哪个用户添加了哪个选择 例如:表格选择

user_id   selection_id
10          1

所以更新选择意味着向表中添加新记录并插入新记录[可以使用简单的sql函数]