我已经查看了很多问题以找到解决方案。我知道我很接近,但在确认要删除后,我仍然没有收到任何与我的deleteData.php有关的事情。
测试阵列可以获得成功的结果
示例:我检查了第1,2和第1行31 ...然后按#btn_del。
首先,我得到确认“你确定......?”
接下来,我看到正确的警报(数组)1,2,31
下一步...... ajax应该将这个数组数据发送到deleteData.php进行处理。
$('a#btn_del').click(function(e) {
e.preventDefault();
page = $(this).attr("href");
ids = new Array()
a = 0;
$(".chk:checked").each(function(){
ids[a] = $(this).val();
a++;
})
// alert(ids);
if (confirm("Are you sure you want to delete these courses?")) {
$.ajax({
url : 'deleteData.php',
data : ids,
type : "POST",
//dataType : 'json',
success : function(res) {
if ( res == 1 ) {
$(".chk:checked").each(function() {
$(this).parent().parent().remove();
}) // end if then remove table row
} // end success response function
} // end ajax
}) // end confirmed
}
return false;
}); // end button click function
}); // end doc ready
<?php
require_once('config.php'); // Connect to the database
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME)
or die ('Error connecting to MySQL server.'.$dbc);
foreach ($_POST['ids']
as $id) {
$sql = "DELETE FROM unit_genData
WHERE unit_id='" . $id . "'";
$result = mysqli_query($sql)
or die(mysqli_error($dbc));
} // end echo result count
mysqli_close($dbc); // close MySQL
echo json_encode(1);
?>
将GET更新为POST
更新数据:数据'ids':ids
a)在php ... echo $ _POST ['ids']; 没有结果 b)在js中...评论了if(确认...... 没有结果
看起来AJAX没有解雇(可以这么说)
答案 0 :(得分:1)
首先,我会使用POST代替GET进行删除。
然后你需要将正确的数据发送到你的PHP脚本。你现在拥有的只是一个字符串,没有键值对,这是你在后端所期望的。
发送数据的最简单方法是使用类似的东西(假设你有一个表单):
data: $('form').serialize(),
但你也可以发送一个像你正在构建的数组:
data: ids,
第一种方法的优点是值会自动转义/编码(显然只会对整数产生影响......)。
在后端你需要防止你现在的SQL注入问题。您可以使用带有绑定参数的预准备语句来执行此操作,或者在数字ID的情况下,您可以将它们转换为整数。
编辑:正如@ Fred-ii-的评论中所述,字符串中的其他空格会导致您的情况失败。我建议准备一个语句,但如果你决定转换为int并使用它,只需删除引号。
另请注意,过程mysqli_*
函数将数据库链接作为第一个参数,它既适用于查询,也适用于错误处理。