使用复选框更新多个数据codeigniter

时间:2017-06-07 07:34:34

标签: php jquery ajax codeigniter-3

我正在尝试通过AJAX更新多个数据,但我已尝试多次,但数据没有更改,请帮助修复它以便完美运行。

控制器:

function update_notif() {
    $this->My_model->update_multiple();
    $this->session->set_flashdata('msg', 
                '<div class="callout callout-warning">
                    <h4>Success</h4>
                </div>');                   
}

型号:

function update_multiple() {
    $update = $this->input->post('id_pesan');
    for ($i=0; $i < count($update) ; $i++) { 
        $data = array('notif' => 0);            
        $this->db->where('id', $delete[$i]);
        $this->db->update('my_table', $data);               
    }
}   

查看:

<button type="button" id="btn_delete" ></button>

<table class="table table-hover table-striped">
    <thead>
        <tr>
            <td><input id="selecctall" type="checkbox"></td>
            <td>No</td>
            <td>Name</td>
            <td>Telp</td>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($show_data as $row) { ?>
        <tr>
            <td><input type="checkbox" class="select_update" name="select_update[]" value="<?php echo $row->id; ?>"></td>
            <td><?php echo $row->no; ?></td>
            <td><?php echo $row->nama; ?></td>
            <td><?php echo $row->telp; ?></td>
        </tr>   
    </tbody>
    <?php } } ?>
</table>    

的Ajax:

var getVar = [];  
$(".select_update:checked").each(function() {  
        getVar.push($(this).val());
}); 

$.ajax({
    url : url,
    type: 'POST',
    data: 'id_pesan='+getVar,
    dataType: 'json',
    success: function(response)
    {
        if(response){
            location.reload();
        }           
    },
    error: function (jqXHR, textStatus, errorThrown)
    {
        alert('Error');
    }
 });

2 个答案:

答案 0 :(得分:2)

你的Ajax是怎样的?
我认为你必须将
$update = $this->input->post('select_id');

改为

$update = $this->input->post('select_update');$this->input->post('select_update[]');

因为您的复选框的name属性而更改了

$this->db->where('id', $delete[$i]);



$this->db->where('id', $update[$i]);

或在foreach

中使用它
function update_multiple() {
    $updates = $this->input->post('select_update');

    foreach ($updates as $update) { 
        $data = array('notif' => 0);            
        $this->db->where('id', $update);
        $this->db->update('my_table', $data);               
    }
}   

更新#1

您的Ajax应如下所示 - 将范围保持在data

ajax
$.ajax({
  url : url,
  type: 'POST',
  data: $(".select_update:checked").serialize(),
  dataType: 'json',
  success: function(response) { ... },
  error: function (jqXHR, textStatus, errorThrown) { ... }
});

答案 1 :(得分:0)

您似乎已使用delete_multiple方法粘贴了代码,这就是您使用$delete代替$update的原因

function update_multiple() {
    $update = $this->input->post('select_id');
    for ($i=0; $i < count($update) ; $i++) { 
        $data = array('notif' => 0);            
        $this->db->where('id', $delete[$i]);
        $this->db->update('my_table', $data);               
    }
}

解决方案:

function update_multiple() {
    $update = $this->input->post('select_id');
    for ($i=0; $i < count($update) ; $i++) { 
        $data = array('notif' => 0);            
        $this->db->where('id', $update[$i]);
        $this->db->update('my_table', $data);               
    }
}

受到UfguFugullu的启发,他显然也受到了我的回答的启发:

需要

select_update而不是select_id