【问题标题】:PHP Codeigniter batch update on some field failed某些字段的 PHP Codeigniter 批量更新失败
【发布时间】:2016-03-07 22:12:17
【问题描述】:

我有一个这样的 html 表格: 查看

<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>

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);
 });

结果如下所示:

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
    )

)

这个数组用于更新我的表中的批处理。

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)

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;

控制器

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]);
}

这是模型

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";
    }
}

我的大问题是,我想使用更新批处理。但是,我只想更新工时和交流字段。我真的坚持了好几天,任何帮助都非常感谢

更新 非常感谢苏丹先生。 现在,我的代码看起来像这样:

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);
}

我的模型出了点问题,因为我需要三个参数来 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";
    }
}

感谢您的解决方案

【问题讨论】:

标签: jquery codeigniter


【解决方案1】:

在你的控制器中,用这个替换你的函数:

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]);
}

【讨论】:

    【解决方案2】:

    有几种方法可以解决一个问题,但我们只能选择最聪明的方法。

    您只需要选择所需的元素,而不是推入数组并发布它们。 请为输入元素提供名称属性,并在视图 (html) 和 jQuery 中进行检查以选择所需的元素。不要更改模型和控制器中的任何内容。

    第 1 步 输入元素应具有名称属性。

    <input class="form-control" type="text" value="10.00" placeholder="10.00" disabled="" name="MANHOUR"> <input id="A/C" name="A/C" class="form-control" type="text" value="11111">

    第 2 步 JQUERY -- 你在哪里获得值的地方是下面的代码而不是这个row_data.push($(this).val());

    if($(this).attr("name")==='name_type' || $(this).attr("name")==='MANHOUR' || $(this).attr("name")==='A/C'){
    row_data.push($(this).val());}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多