某些字段上的PHP Codeigniter批量更新失败

Fad*_*zil 6 jquery codeigniter

我在这个html上有一个表: VIEW

<table id="tableReport" class="table table-hover">
<thead>
    <tr>
        <th>NO</th>
        <th>TYPE</th>
        <th>ITEM</th>
        <th>DAMAGE</th>
        <th>REPAIR</th>
        <th>REMARKS</th>
        <th>MANHOUR</th>
        <th>MATERIAL</th>
        <th>A / C</th>
    </tr>
</thead>
<tbody>
    <tr>
        <td>
            <input class="form-control" type="text" value="68" placeholder="68" disabled="" name="name_type">
        </td>
        <td>
            <input class="form-control" type="text" value="Cleaning" placeholder="Cleaning" disabled="" name="name_item">
        </td>
        <td>
            <input class="form-control" type="text" value="Certificate" placeholder="Certificate" disabled="" name="name_item">
        </td>
        <td>
            <input class="form-control" type="text" value="Broken" placeholder="Broken" disabled="" name="name_damage">
        </td>
        <td>
            <input class="form-control" type="text" value="Blast&Paint" placeholder="Blast&Paint" disabled="" name="name_repair">
        </td>
        <td>
            <input class="form-control" type="text" value="AAAAAA" placeholder="AAAAAA" disabled="" name="name_remarks">
        </td>
        <td>
            <input class="form-control" type="text" value="10.00" placeholder="10.00" disabled="" name="name_damage">
        </td>
        <td>
            <input id="material" class="form-control" type="text">
        </td>
        <td>
            <input id="A/C" class="form-control" type="text">
        </td>
    </tr>
    <tr>
        <td>
            <input class="form-control" type="text" value="69" placeholder="69" disabled="" name="name_type">
        </td>
        <td>
            <input class="form-control" type="text" value="Cleaning" placeholder="Cleaning" disabled="" name="name_item">
        </td>
        <td>
            <input class="form-control" type="text" value="Exterior" placeholder="Exterior" disabled="" name="name_item">
        </td>
        <td>
            <input class="form-control" type="text" value="Modified" placeholder="Modified" disabled="" name="name_damage">
        </td>
        <td>
            <input class="form-control" type="text" value="Replace" placeholder="Replace" disabled="" name="name_repair">
        </td>
        <td>
            <input class="form-control" type="text" value="BBBBB" placeholder="BBBBB" disabled="" name="name_remarks">
        </td>
        <td>
            <input class="form-control" type="text" value="10.00" placeholder="10.00" disabled="" name="name_damage">
        </td>
        <td>
            <input id="material" class="form-control" type="text">
        </td>
        <td>
            <input id="A/C" class="form-control" type="text">
        </td>
    </tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

JQUERY 我使用这个jquery获得了那些表上的所有值:

$('#tableReport').find('tbody').find('tr').each(function () {
        var row_data = [];
        $(':input', this).each(function () {
            row_data.push($(this).val());
        });
        table_data.push(row_data);
 });
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样:

Array
(
[0] => Array
    (
        [0] => 68
        [1] => Cleaning
        [2] => Certificate
        [3] => Broken
        [4] => Blast&Paint
        [5] => AAAAAA
        [6] => 10.00
        [7] => a
        [8] => b
    )

[1] => Array
    (
        [0] => 69
        [1] => Cleaning
        [2] => Exterior
        [3] => Modified
        [4] => Replace
        [5] => BBBBB
        [6] => 10.00
        [7] => c
        [8] => d
    )

)
Run Code Online (Sandbox Code Playgroud)

这个数组用于我表中的update_batch.

mysql> select * from tb_repair_detail;
+-----------+--------------------+------+-----------+-----------+---------+---------+----------+------+
| DETAIL_ID | REPAIR_ESTIMATE_ID | ITEM | DAMAGE_ID | REPAIR_ID | REMARKS | MANHOUR | MATERIAL | AC   |
+-----------+--------------------+------+-----------+-----------+---------+---------+----------+------+
|        68 |                 43 | 01   | 01        | 30        | AAAAAA  |   10.00 |     NULL | NULL |
|        69 |                 43 | 03   | 16        | 45        | BBBBB   |   10.00 |     NULL | NULL |
+-----------+--------------------+------+-----------+-----------+---------+---------+----------+------+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

SO,AJAX调用控制器采取这个动作:

$.ajax({
        url: "<?php echo base_url('admin/c_admin/update_json_detail'); ?>",
        type: "POST",
        data: {
            POST_ARRAY: table_data
        },
        dataType: 'json',
        success: function (obj) {
            console.log(obj);
        }
    });
return false;
Run Code Online (Sandbox Code Playgroud)

CONTROLLER

public function update_json_detail(){
   $execute = $this->input->post("POST_ARRAY");
   /*CODE TO INSERT BATCH*/
   $callback = $this->m_admin->update_eir_to_cost($execute, execute_first_index[0]);
}
Run Code Online (Sandbox Code Playgroud)

这是模型.

public function update_eir_to_cost($data, $id) {
    $this->db->trans_start();
    $this->db->update_batch('tb_repair_detail', $data, $id); 
    $this->db->trans_complete();

    if ($this->db->trans_status() === FALSE) {
        // generate an error... or use the log_message() function to log your error
        echo "Error Updating";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的大问题是,我想使用更新批处理.但是,我只想更新manhour和ac字段.我真的坚持了好几天,任何帮助它如此欣赏

更新 谢谢Mr.Sultan先生.现在,我的代码看起来像这样:

public function update_json_detail() {
    $post_data = $this->input->post("POST_ARRAY");
    $execute = array();
    foreach ($post_data as $data) {
        $execute[] = array(
            'ID'=> $data['0'],
            'MATERIAL' => $data['7'],
            'AC' => $data['8']
        );
    }

    /* CODE TO INSERT BATCH */
    $callback = $this->m_admin->update_eir_to_cost($execute);
}
Run Code Online (Sandbox Code Playgroud)

我的模型有点麻烦,因为我需要三个参数来update_batch

public function update_eir_to_cost($id, $material, $ac) {
    $data = array(
        "MATERIAL" => $material,
        "AC" => $ac
    );

    $this->db->trans_start();
    $this->db->where($id);
    $this->db->update_batch('tb_repair_detail', $data);
    $this->db->trans_complete();

    if ($this->db->trans_status() === FALSE) {
        // generate an error... or use the log_message() function to log your error
        echo "Error Updating";
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的解决方案

Sul*_*tan 0

在您的控制器中,将您的函数替换为以下函数:

public function update_json_detail(){
   $post_data = $this->input->post("POST_ARRAY");
   $execute = array();
   foreach($post_data as $data){
   $execute[] = array(
    'MANHOUR' => $data['6'],
    'AC' => $data['8']
   ); 
   }
   /*CODE TO INSERT BATCH*/
   $callback = $this->m_admin->update_eir_to_cost($execute, execute_first_index[0]);
}
Run Code Online (Sandbox Code Playgroud)