PHP通过复选框 bool 值更改数据库的多个值

标签 php html mysql checkbox material-design-lite

我正在尝试制作某种简单的博客平台,到目前为止它一直运行良好,我的页面在一个表中有一个文章列表,它从我的 SQL 数据库中获取该列表,还有一列其中说明文章是否公开。问题是我无法将所有这些复选框写成 bool 值来工作(如果选中输入 1 否则为 0)。我认为出错的部分是:

<?php
if (isset($_POST['submit'])) {
    try {
        $stmt = $db->prepare('SELECT postID FROM blog_posts') ;
        $idArray = $stmt->fetch();

        for($i = $idArray; $i > 0; $i--){
            if(document.getElementById($i).checked){
                $public = 1;
            } else {
                $public = 0;
            }

            try {
                $stmt = $db->prepare('UPDATE blog_posts SET public = :public WHERE postID = '$i) ;
                $stmt->execute(array(
                    ':public' => $public
                    ));
            }
        }
    }
?>

完整的代码可以在这里找到 Hastebin

最佳答案

使用数组格式命名您的 public 复选框,这样每个复选框的名称中都有 id,如下所示:

<input type="checkbox" name="public[<?php echo $postID ?>]">

然后您可以使用此 PHP 代码进行更新:

if (isset($_POST['submit'])) {

    // You can use query here instead of prepare if you want all the blog posts
    $stmt = $db->query('SELECT postID FROM blog_posts');

    // fetch the postID from each row in the query result
    while ($id = $stmt->fetchColumn()) {

        // set public based on the submitted value from your form
        $public = empty($_POST['public'][$id]) ? 0 : 1;

        // do the update
        $stmt = $db->prepare('UPDATE blog_posts SET public = ? WHERE postID = ?') ;
        $stmt->execute(array($public, $id);
    }
}

请注意,您正在SELECTing 每篇博文,因此如果您的表单不包括每篇博文,此代码将设置所有不在您的博文中的形式为 public=0。如果您没有在表单上显示每篇博文,则需要在 SELECT 语句中添加一个 WHERE 子句,以便它只包含 包含在您的表单中。

关于PHP通过复选框 bool 值更改数据库的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38150429/

相关文章:

html - 将按钮从默认状态切换到按下状态并返回

mysql - laravel 3 utf8mb4 支持

php - 无法在数据库中存储图片(没有出现错误信息)

php - 一个 URL 中有两个单独的 ID?

php - 跨多个服务器使用 Zend Cache 和 AWS ElastiCache 的缓存值不一致

javascript - PHP下拉框存储选择的值

javascript - 如何使用 WebGL 在 Canvas 上设置像素的颜色?

HTML 链接在 Div 中无效

php - 如何在 PHP 和 MySQL 中回显数据库中每个表中的第一项?

php - 如何让MySQL在按日期分组时返回空天?