使用复选框删除多个项目 - ajax或jquery

时间:2017-09-20 16:15:34

标签: php html ajax

我正在尝试使用复选框删除数据库表中的多个项目。我用PHP做到了这一点,但是现在我想用javascript来做它所以它不会刷新页面。我如何修改下面的代码,以便删除多个项目而不刷新页面?

HTML

<div id="msg"></div>
<form>
  <input type="checkbox" id='remove[]-<?php echo $item_id;?>' name="remove[]" value="<?php echo $item_id; ?>" />
  <button class="btn btn-danger" id="del_btn" type="submit" name="delete" 
      onclick='return del(<?php echo $item_id;?>)'><b>DELETE</b></button>
</form>

JAVASCRIPT

 function del(item_id){
    $.ajax({
        type:"post",
        url:"delete_form.php",
        data: { 
            id: item_id, 
            name: $('#remove[]-'+item_id).val() 
        },
        cache:false,
        success: function(html){
            $('#msg').html(html);
         }
        });
        $("html, body").animate({ scrollTop: 0 }, "slow");
     return false;
}

PHP

foreach ((array) $_POST['remove'] as $remove_id) {
    $delete_item = "delete from products where item_id='$remove_id'";
    $run_delete = mysqli_query($con, $delete_item);
    if ($run_delete){
        echo "<h3> was deleted successfully</h3>";
    }
}

2 个答案:

答案 0 :(得分:0)

尝试循环你的js以获得一组id。

 var array = [];
   $.each($(inputclass),function(a){
   if($(this).is(':checked')===true){
     array.push($(this).val());
    }
  }

然后在ajax调用的参数中发送它。

在php中重现它并循环删除的值。

答案 1 :(得分:0)

您的代码没有多大意义,因为您只传递JavaScript中的一个项目,但是在PHP中循环和删除多个项目。

如果你有一个像

这样的表格
<form>
    <!-- id is useless IMO -->
    <input type="checkbox" name="remove[]" value="1" />
    <input type="checkbox" name="remove[]" value="2" />
    <!-- etc -->
    <!-- change type to button to prevent the form from submitting -->
    <button type="button" class="btn btn-danger" id="del_btn"><b>DELETE</b></button>
</form>

Attach an onclick event handler到你的按钮。只需serialize your form即可获得“已选中”复选框。

$('#del_btn').click(function () {
    $.post("delete_form.php", $(this).closest('form').serialize(), function (html) {
        $('#msg').html(html);
    });
});

在PHP中,使用IN运算符

使用一个查询而不是循环
$ids = $_POST['remove'];
$in = implode(', ', $ids); // [1, 2, 3] becomes '1, 2, 3'
$sql = "DELETE FROM products WHERE item_id IN ($in)";

if (mysqli_query($con, $sql)) {
    echo "<h3> was deleted successfully</h3>";
} else {
    echo "<h3> something went wrong</h3>";
}

除此之外:您的代码容易受到SQL注入攻击,因此您应该在运行SQL之前验证收到的数据。