>我目前正在纠结为什么我的代码不执行以下多表行删除php代码:
incude("dbconnect.php");
if (isset($_POST["id"])) {
foreach ($_POST["id"] as $id) {
$sql = "DELETE FROM doctor WHERE DOC_LICENSE_NUM='.$id.'";
if ($mydatabase->mysqli_query($sql) === TRUE) {
echo "<div>Record deleted successfully</div>";
} else {
echo "Error deleting record: " . $mydatabase->error;
}
//$sql="DELETE from DOCTOR where DOC_LICENSE_NUM='".$id."'";
//mysqli->query($connect, $sql);
}
//mysqli->close();
}
而数据库连接链接$mydatabase到SQL。现在,我创建了一个带有 id btn_delete 的按钮,以便使用 javascript 单击函数来处理要在 sql 中删除的多行。
<div style="float: right; margin: 0px 10px 10px 0px;"><button type="button" name="btn_delete" class="btn" id="btn_delete" ><span class="fa fa-trash" style="font-size:16px; margin-right:5px;"></span>Delete Multiple</button></div>
我所做的是我使用 $.ajax 来收集数组中的复选框,并使用我的 php 的 url 删除表中的行,如果它已进入 php,它将继续淡出行表。
$('#btn_delete').click(function(){
if(confirm("Are you sure you want to delete these?")){
var id=[];
$(':checkbox:checked').each(function(i){
id[i]=$(this).val();
//alert(id);
});
if(id.length===0){
alert("Please select at least two checkboxes");
}else{
$.ajax({
url:'muldel.php',
method: 'POST',
data: {id:id},
success: function(){
for (var i=0; i<id.length; i++){
$('tr#'+id[i]+'').css('background-color', '#ccc');
$('tr#'+id[i]+'').fadeOut('slow');
}
//location.reload();
}
});
}
}else{
return false;
}
});
但是,当它继续将行淡出我的表时,在我刷新它之后,它不会像我预期的那样删除行。我在这里错过了什么?(我忘了提到我使用了唯一的实体键作为我的 ID(
从您的jquery中,您将ID发布为以昏迷分隔的方式,即1,2,3,4等。这应该使用 explode();
或 make array($_POST["id"])
转换为 php 端array(1,2,3,4)
中的数组,然后将其放入您的 foreach 循环中。
foreach ($array as $id) {
}
希望这有帮助
或者在PHP中没有foreach的替代方式,您可以在MySQL中使用IN()
。检查完整的代码(如果插入(。http://www.phpzag.com/delete-multiple-rows-with-checkbox-using-jquery-php-mysql/
由于您正在从 Ajax 调用传递一个数组,因此您需要使用它构建一个 SQL 查询:
$sql = "DELETE FROM doctor WHERE DOC_LICENSE_NUM IN (" . implode(",", $_POST['id']) . ".)";
// Execute
if ($mydatabase->mysqli_query($sql) === TRUE) {
echo "<div>Record deleted successfully</div>";
} else {
echo "Error deleting record: " . $mydatabase->error;
}
注意:您可以接受 SQL 注入。当您的查询需要其他人的参数才能执行时,请始终使用预准备语句。这可能会有所帮助。
您可以使用以下查询删除多个记录。
$sql = "DELETE FROM doctor WHERE DOC_LICENSE_NUM IN (" . implode(',', $_POST['id']) . ")";
if ($mydatabase->mysqli_query($sql) === TRUE) {
echo "<div>Record deleted successfully</div>";
} else {
echo "Error deleting record: " . $mydatabase->error;
}
无需迭代循环。