2016-08-30 58 views
1

我有3个表 - 产品,类别,product_category。php mysql如何检查多个复选框添加/删除选项和更​​新数据库

表产品 - > 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更多选项)

在─>西餐和混合食品进行检查。

离职后>西餐,拌匀食用+中国食品

案例2:(删除西餐)

在─>西餐和混合食品进行检查。

后 - >混合食品只检查。

案例3:(删除西餐,加入中国菜)

在─>西餐和混合食品进行检查。

之后 - >混合食物和中国食品进行检查。

回答

2

使用array_diff()得到选中的值的列表:

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

非常感谢你的不同想法 –

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

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

+0

嗯..这样不是在处理数据的好方法吗?尤其是在插入/更新/删除数据库时?任何其他更好的方法? – gosulove

+0

如果您担心数据完整性,只需将整个事务包装在一个事务中。 –

+0

@SamDufel这意味着你也推荐这样做吗? – gosulove

相关问题