我正在尝试使用复选框删除数据库表中的多个项目。我用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>";
}
}
答案 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之前验证收到的数据。