【问题标题】:php mysql how to check multiple checkbox add/remove options and update databasephp mysql如何检查多个复选框添加/删除选项和更​​新数据库
【发布时间】:2016-08-31 01:43:53
【问题描述】:

我有 3 个表 - 产品、类别、产品类别。

表格产品 -> PID , 产品名称

表格类别 -> CID、类别名称

表 product_category -> PID、CID

我的问题是处理 product_category 表。让我详细解释一下。

当我添加新产品时,我需要更新 2 个表 -> product 和 product_category。

product_category 用于存储产品 ID 和类别 ID,因为 1 个产品可以分配给多个类别。

添加新产品时,1个输入框加1个数组显示类别供用户选择。例如。

foreach($display->category_name as $iid => $name) {

            echo '

                <div class="checkbox">
                    <label><input type="checkbox" name="check_list[]" value="'.$iid.'">'.$name.'</label>
                </div>

                ';
        }

所以当点击更新按钮时,它会显示用户之前键入的记录。

所以我的问题是如何检查用户是否检查了另外 1 个选项或取消选中 1 个或多个选项或删除所有选项。然后相应地更新表 product_category。

参考截图

案例1:(这个很简单,多加1个选项)

Before->Western food 和 Mix food 被选中。

After->西餐,混合餐+中餐

案例2:(去掉西餐)

Before->Western food 和 Mix food 被选中。

After->仅检查混合食物。

案例3:(去掉西餐,加中餐)

Before->Western food 和 Mix food 被选中。

After->混合食物和中餐检查。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    使用array_diff() 获取未检查值的列表:

    $old_check_list = ['1', '2'];
    $new_check_list = ['2', '3'];
    $unchecked_values = array_values(array_diff($old_check_list, $new_check_list));
    

    【讨论】:

    • 非常感谢您的不同想法
    【解决方案2】:

    当我处理复选框时,我通常会删除所有以前的值,然后重新插入新值。这可以防止并发症:

    $mysqli->query("DELETE FROM product_category WHERE product = $id");
    
    foreach ($_GET['check_list'] as $i => $category_id) {
        $mysqli->query("INSERT INTO product_category
                (product_id, category_id) 
            VALUES
                ($id, $category_id)");
    }
    

    请记住清理输入 - 不要复制/粘贴此示例。

    【讨论】:

    • hmmm.. 这种方式不是处理数据的好方法吗?特别是在插入/更新/删除数据库时?还有其他更好的方法吗?
    • 如果您担心数据完整性,只需将整个事情包装在事务中即可。
    • @SamDufel 所以这意味着你也推荐这种方式吗?
    • 这是一种比替代方法更清洁的方法。另一种方法是根据原始选择和更新选择的差异对添加和删除进行单独查询。但是,这会给您的代码库带来额外的复杂性,这可能会导致其他问题。
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    • 2012-06-03
    • 2014-11-04
    • 2012-08-16
    • 1970-01-01
    • 2018-05-03
    相关资源
    最近更新 更多