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

时间:2016-07-01 16:49:35

标签: php html mysql checkbox material-design-lite

我正在尝试制作某种简单的博客平台,它现在已经很好了,直到现在,我的页面上有一个文章列表,它从我的sql数据库中获取该列表并且还有一个列如果文章是公开的或不公开的,请说明。问题是我无法将所有这些复选框写为布尔值来工作(如果选中输入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
                    ));
            }
        }
    }
?>The entire code can be found here on [Hastebin][1] Thanks in advance

1 个答案:

答案 0 :(得分:0)

使用数组格式为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);
    }
}

请注意,您SELECT 每个博客帖子,因此,如果您的表单不包含每篇博文,则此代码会将表单上不存在的每个帖子设置为{ {1}}。如果您没有在表单上显示每篇博文,则需要在public=0语句中添加WHERE子句,以便它只包含 的行包含在您的表格中。