使用ajax删除已检查的表行

时间:2014-10-31 18:46:30

标签: php jquery ajax delete-row checked

我已经查看了很多问题以找到解决方案。我知道我很接近,但在确认要删除后,我仍然没有收到任何与我的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


deleteData.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没有解雇(可以这么说)

1 个答案:

答案 0 :(得分:1)

首先,我会使用POST代替GET进行删除。

然后你需要将正确的数据发送到你的PHP脚本。你现在拥有的只是一个字符串,没有键值对,这是你在后端所期望的。

发送数据的最简单方法是使用类似的东西(假设你有一个表单):

data: $('form').serialize(),

但你也可以发送一个像你正在构建的数组:

data: ids,

第一种方法的优点是值会自动转义/编码(显然只会对整数产生影响......)。

在后端你需要防止你现在的SQL注入问题。您可以使用带有绑定参数的预准备语句来执行此操作,或者在数字ID的情况下,您可以将它们转换为整数。

编辑:正如@ Fred-ii-的评论中所述,字符串中的其他空格会导致您的情况失败。我建议准备一个语句,但如果你决定转换为int并使用它,只需删除引号。

另请注意,过程mysqli_*函数将数据库链接作为第一个参数,它既适用于查询,也适用于错误处理。