我正在尝试编写最简单的代码来仅使用 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 数组,而不是全部(不包括具有“off”值的那些)。
现在,我想更新整个表,但就像我说的,我只能使用选中(打开)的值进行操作。
虽然我最初是用 'checked' = 0 更新整个表,然后将我保存在数组中的所有 id 设置回 'checked' = 1。
UPDATE -> set all to 0
UPDATE -> set checked (values from array) to 1
是否有更优雅的单查询解决方案来实现这一目标?
我知道首先选择所有 id,将它们与 php 中的新数组进行比较然后更新的选项,但我想避免这种情况。
最佳答案
您需要一个有条件的 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
}
关于php - 使用覆盖旧值的新复选框值更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37175531/