使用ajax删除选中的表行


delete checked table rows with ajax

我检查了许多问题以找到解决方案。我知道我已经接近了,但在确认删除后,我的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_*函数将数据库链接作为第一个参数,该参数同时应用于查询和错误处理。