使用ENUM和自定义列在DB中更新多个复选框

时间:2016-02-19 11:56:41

标签: php mysql checkbox pdo enums

我有一个表格,其中自定义列由管理员创建,每列都有自己的枚举'0','1'。您可以在此处选择列是真还是假。

现在我想要一个选项,管理员可以通过复选框更新此true或false。

复选框。

<div class="col-sm-9">
    <?php
    if(isset($produci[0])) {
    foreach($produci as $key => $avlue) {
    ?>
    <div class="row-fluid">
       <label>
           <input name="clickedproduct[]" type="checkbox" value="<?php echo $avlue['name']; ?>" <?php echo (($_SERVER['REQUEST_METHOD'] == 'POST') ? ((isset($_POST[$avlue['name']])) ? ' value="'.$avlue[$avlue['name']].'" checked' : ' value="'.$avlue[$avlue['name']].'"') : (($avlue[$avlue['name']] == '1') ? ' value="'.$avlue[$avlue['name']].'"checked' : ' value="'.$avlue[$avlue['name']].'"')); ?>>
           <?php echo $avlue['name']; ?>
      </label>                                    
    </div> 
    <?php } }else{
                  echo '<font color="red">Er zijn nog geen producten aangemaakt.</font>';
                 } ?>                           
</div>

我的PDO。

if(isset($_POST['clickedproduct']))
  {  $values = array();
  foreach($_POST['clickedproduct'] as $access )
  { 
    $clickedproduct = '0'; // = bijv. 1 of 0
    $column = $access; // = bijv. product
  } // end of foreach.


    $product_access = $dbh->prepare("UPDATE products_access SET `{$column}` = :enum WHERE products_access.id = :id");
    $product_accessvar = trim($user['id']);
    $product_access->bindParam(':id', $product_accessvar, PDO::PARAM_INT);
    $product_access->bindParam(':enum', $clickedproduct, PDO::PARAM_INT); 
    $product_access->execute();
}

有人有解决方案吗?

1 个答案:

答案 0 :(得分:0)

您应该通过以下方式切换ENUM列。

UPDATE table_name SET column_name = IF(column_name=1, 0, 1);

在您的代码中,

$sql = "UPDATE products_access SET  `{$column}` = IF( `{$column}`=1, 0, 1) WHERE products_access.id = :id";
$product_access = $dbh->prepare($sql);
$product_accessvar = trim($user['id']);
$product_access->bindParam(':id', $product_accessvar, PDO::PARAM_INT);
//$product_access->bindParam(':enum', $clickedproduct, PDO::PARAM_INT); 
$product_access->execute();