无法使用 jquery 和 ajax 删除多个用户(codeigniter 3)

Posted

技术标签:

【中文标题】无法使用 jquery 和 ajax 删除多个用户(codeigniter 3)【英文标题】:Unable to delete multiple user using jquery and ajax (codeigniter 3) 【发布时间】:2019-02-03 06:56:12 【问题描述】:

我正在尝试使用 PHPAJAX 从表中按行 ID 删除记录,但是当我单击按钮时,它显示执行操作时出错.当我检查代码时,它显示错误 500(内部服务器错误)。

这是我的 JS 函数:

function deleteSelUser()

    var data = new Array();
    $.each($("input[name='id[]']:checked"), function () 
        data.push($(this).val());
    );
    if (data == "")
    
        swal("Error", "Please select at least one user.", "error");
        return false;
    
    swal(
        title: "Are you sure?",
        text: "You will not be able to recover this users!",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Yes, delete it!",
        closeOnConfirm: false
    ,
            function () 

                //console.log(data);
                $.ajax(
                    url: SITE_URL + "depositoradmin/delete_select_user",
                    type: "POST",
                    data: depositor_user_id: data,
                    success: function (res) 
                        // '.loader').hide();
                        var response = JSON.parse(res);
                        if (response.status == 1)
                        
                            // swal("Success", response.msg, "success");
                            swal("Deleted!", response.msg, "success");
                            location.reload();
                         else
                        
                            swal("Error", response.msg, "error");
                        
                    
                );
            );

这是我的控制器功能:

function delete_select_user ()

    $depositor_user_id = implode("," , $this->input->post('depositor_user_id'));
    $data = array('is_deleted' => 1);
    $optresult = $this->depositor->delete_user_multiple($depositor_user_id , $data , 'depositor_user');
    if ($optresult) 
        echo json_encode(array('status' => 1 , 'msg' => "User deleted successfully"));
     else 
        echo json_encode(array('status' => 0 , 'msg' => "User not deleted"));
    

这是我的模型函数:

public function delete_user_multiple($depositor_user_id, $data, $table_name) 
    $this->db->where('user_id IN(' . $depositor_user_id . ')');
    $this->db->update($table_name, $data);
    return $depositor_user_id;

关于如何解决这个问题的任何想法?

【问题讨论】:

检查您的服务器错误日志以查看实际的错误消息。此外,您对 SQL 注入持开放态度。永远不要像这样将用户数据直接放入您的查询中。改用他们的方法$this->db->where_in('id', $arrayWithIds):***.com/questions/13717555/… 检查 error_log 看看出了什么问题。 【参考方案1】:

CI 3.1.19 存在 where_in 方法

$names = array('Frank', 'Todd', 'James');
$this->db->where_in('username', $names);
// Produces: WHERE username IN ('Frank', 'Todd', 'James')

https://www.codeigniter.com/userguide3/database/query_builder.html#looking-for-specific-data

$optresult = $this->depositor->delete_user_multiple($depositor_user_id , $data , 'depositor_user');
    if ($optresult) 
        echo json_encode(array('status' => 1 , 'msg' => "User deleted successfully"));
     else 
        echo json_encode(array('status' => 0 , 'msg' => "User not deleted"));
    

最好尝试 catch 而不是测试结果(查询可能会返回 0,因为记录已被删除)并且您可以打印异常消息以查看发生了什么问题

【讨论】:

【参考方案2】:

错误来自我的模型控制器我使用了错误的数据库密钥 user_id 数据库的正确密钥是 current_user_id

public function delete_user_multiple($depositor_user_id, $data, $table_name) 
$this->db->where('user_id IN(' . $depositor_user_id . ')');
$this->db->update($table_name, $data);
return $depositor_user_id;

【讨论】:

以上是关于无法使用 jquery 和 ajax 删除多个用户(codeigniter 3)的主要内容,如果未能解决你的问题,请参考以下文章

Ajax(jquery) 同时处理多个异步请求

用户提交弹出窗体时发送多个ajax调用

如何使用 PHP、jQuery 和 AJAX 上传多个文件

使用带有 DELETE 的 Ajax 请求删除项目,使用 JQuery

第15章WEB15-AJAX和JQuery案例篇

无法使用 PHP 和 JQuery Ajax 将新记录插入 mysql db