php - 使用覆盖旧值的新复选框值更新表

标签 php mysql

我正在尝试编写最简单的代码来仅使用 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/

相关文章:

php - 使用 $_SERVER ['document_root' ] 有什么意义?

PHP 5.3.2 和 Zend Framework session

javascript - Ajax uploader 错误500

Python 连接到 ssh mysql 服务器

mysql - 当 ' repair table ' 查询在 mysql 中不起作用时该怎么办?

php - XMLHttpRequest 在 IE 7/8 中不起作用,但在其他浏览器中起作用

php - Magento 2 - 当用户点击 "Go To Checkout"时调度事件

php - mysql左连接回显最后一行

mysql - 引擎类型为InnoDB时性能较低

php - 如何解决 JSONException : No value in my Android project?