我检查了许多问题以找到解决方案。我知道我已经接近了,但在确认删除后,我的deleteData.php仍然没有发生任何事情。
状态:
测试阵列可获得成功的结果
示例:我检查了第1行、第2行和第3行;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
<?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没有启动(可以这么说)
首先,我会使用POST而不是GET进行删除。
然后,您需要将正确的数据发送到php脚本。您现在所拥有的只是一个字符串,没有键值对,这正是您在后端所期望的。
发送数据的最简单方法是使用以下内容(假设您有一个表单):
data: $('form').serialize(),
但是你也可以发送一个像你正在构建的阵列:
data: ids,
第一种方法的优点是可以自动对值进行转义/编码(显然,只对整数没有区别…)
在后端,您需要防止现在出现的sql注入问题。您可以使用带有绑定参数的准备好的语句来实现这一点,或者在数字ID的情况下,您可以将它们强制转换为整数。
编辑:正如@Fred ii-在评论中所指出的,字符串中的额外空格将导致您的条件失败。我建议您准备一个语句,但如果您决定强制转换为int并使用它,只需删除引号即可。
还要注意,过程mysqli_*
函数将数据库链接作为第一个参数,该参数同时应用于查询和错误处理。