我正在尝试编写最简单的代码,仅使用mysql更新复选框值。
包含一些预定义值的数据库的现有示例:
id | checked
----------
1 | 1
2 | 0
3 | 1
HTML:
使用现有数据库值生成HTML,稍后由用户修改并更新。
<input type="checkbox" name="check[1]" checked="checked">
<input type="checkbox" name="check[2]">
<input type="checkbox" name="check[3]" checked="checked">
POST仅返回 检查的ID的数组,而不是所有这些(不包括&#34; off&#34;值的那些)。
现在,我想更新整个表格,但就像我说的那样,我只能使用已检查(开启)值进行操作。
我最初的做法是更新整个表格并检查&#39; = 0,然后将我保留在数组中的所有ID设置为&#39;检查&#39; = 1。
UPDATE -> set all to 0
UPDATE -> set checked (values from array) to 1
是否有更优雅的查询解决方案来实现这一目标?
我知道首先选择所有id的选项,将它们与php中的新数组进行比较,然后进行更新,但我们希望避免这种情况。
答案 0 :(得分:1)
您需要一个条件UPDATE
操作,如下所示:
// When first and third checkboxe is checked
UPDATE checkbox_table SET checked = CASE WHEN id IN (1,3) THEN 1 ELSE 0 END;
或者
// When second and third checkbox is checked
UPDATE checkbox_table SET checked = CASE WHEN id IN (2,3) THEN 1 ELSE 0 END;
就像那样......
示例将是这样的:
<强> HTML:强>
<form method="post">
<input type="checkbox" name="check[1]">
<input type="checkbox" name="check[2]">
<input type="checkbox" name="check[3]">
<input type="submit" name="submit" value="submit" />
</form>
<强> PHP:强>
表单提交后,使用array_keys()
函数获取所选复选框值,然后执行条件UPDATE
操作。
if (isset($_POST['submit'])){
if(isset($_POST['check'])){
$checked_keys = array_keys($_POST['check']);
$query = "UPDATE checkbox_table SET checked = CASE WHEN id IN (" . implode(',', $checked_keys) . ") THEN 1 ELSE 0 END";
}else{
$query = "UPDATE checkbox_table SET checked = 0";
}
// Now execute this $query
}