我有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>
';
}
因此,当点击更新按钮时,它将显示用户之前键入的记录。
所以我的问题是如何检查用户是否再检查1个选项或取消选中1个或多个选项或删除所有选项。然后相应地更新表product_category。
参见截图
案例1 :(这个很容易,只需添加1个选项)
之前 - &gt;检查西餐和混合食物。
之后 - &gt;西餐,混合食物+中国菜
案例2 :(删除西餐)
之前 - &gt;检查西餐和混合食物。
After-&gt;仅检查混合食物。
案例3 :(删除西餐并添加中餐)
之前 - &gt;检查西餐和混合食物。
之后 - &gt;混合食物和中国食物进行检查。
答案 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)");
}
请记住清理输入 - 不要复制/粘贴此示例。