2015-12-03 2 views
6

У меня есть таблица на HTML, как это: VIEWPHP Codeigniter пакетного обновления на некотором поле не удалось

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

) 

Этот массив используется для 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) 

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; 

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

Это модель.

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

Моя большая проблема в том, что я хочу использовать пакет обновления. Но я просто хочу просто обновить manhour и ac field. Я действительно застрял в течение нескольких дней, любая помощь ему так понравилась

UPDATE Огромное спасибо за господина Султана. Теперь мой код выглядит следующим образом:

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

Спасибо за решение

+0

Что с этим связано [tag: batch-file]? – aschipfl

ответ

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

Есть чтобы справиться с проблемой, но мы должны выбрать только самый умный метод.

Вам нужно выбрать только требуемые элементы, кроме массива push и разместить их. Укажите атрибуты атрибутов для элементов ввода и в представлении (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());} 
Смежные вопросы