某些字段的 PHP Codeigniter 批量更新失败
Posted
技术标签:
【中文标题】某些字段的 PHP Codeigniter 批量更新失败【英文标题】:PHP Codeigniter batch update on some field failed 【发布时间】: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";
感谢您的解决方案
【问题讨论】:
这和batch-file有什么关系? 【参考方案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());
【讨论】:
以上是关于某些字段的 PHP Codeigniter 批量更新失败的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP,Codeigniter 中提交带有空字段的表单时出现一些错误