php mysql如何检查多个复选框添加/删除选项并更新数据库

时间:2016-08-30 16:46:23

标签: php mysql

我有3个表 - 产品,类别,product_category。

表产品 - > 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>

                ';
        }

因此,当点击更新按钮时,它将显示用户之前键入的记录。

enter image description here

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

参见截图

案例1 :(这个很容易,只需添加1个选项)

之前 - &gt;检查西餐和混合食物。

之后 - &gt;西餐,混合食物+中国菜

案例2 :(删除西餐)

之前 - &gt;检查西餐和混合食物。

After-&gt;仅检查混合食物。

案例3 :(删除西餐并添加中餐)

之前 - &gt;检查西餐和混合食物。

之后 - &gt;混合食物和中国食物进行检查。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

$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)");
}

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