JavaScript使用复选框从MySQL数据库中删除多行

时间:2017-09-27 21:39:45

标签: javascript php jquery mysql checkbox

我一直试图弄清楚如何使用复选框和JavaScript从MySQL中删除多条记录。

此时我已经有了工作脚本,只删除了我的数据库中的一条记录(最新的id)。

对于每个product我都有复选框

<input class="checkboxProduct" type="checkbox" name="deleteProduct" value="<?php echo $product['id'];?>">

我有一个按钮和JS表单(工作 - 它获取所有需要的ID,我可以显示它们,但不能删除。

<script>
  $(function(){
    var e = document.getElementById( "selectAction" );
    $("#btn-action").click(function(){
      if(e.options[ e.selectedIndex ].value == "delete"){
        var checked = $('.checkboxProduct:checked');
        var id = checked.map(function() {
          return this.value;
        }).get().join(",");
        if (id) {
          checked.closest(".product").remove();
          $.ajax({ 
            url: "<?php echo $_SERVER['PHP_SELF']; ?>?deleteProduct=true?action=select&id=" + id,
            type: "get",
            success: function(result){
              alert("You have successfully deleted these products!");
            }
          });
        }
      }
    });
  });
</script>

删除功能:

public function deleteProduct(){
  try{
    $product_id = $_GET['id'];
    $stmt = $this->conn->prepare("DELETE FROM products WHERE id=('$product_id')");
    $stmt->execute();
  }
  catch(PDOException $e){
    echo $e->getMessage();
  }
}

1 个答案:

答案 0 :(得分:0)

您需要使用IN来匹配列表,而不是=。并且您不能将所有ID放入单个字符串中,它们必须是文字列表中的单独项目。

您应该使用参数化语句来阻止SQL注入。

$product_id = explode(',', $_GET['id']);
// Create a set of ?, ?, ?, ... placeholders the same length as the product ID array
$placeholders = implode(', ', array_fill(0, count($product_id), '?'));
$stmt = $this->conn->prepare("DELETE FROM products WHERE id IN ($placeholders)");
$stmt->execute($product_id);