如何使用Jquery和PHP实现点击保存按钮批量更新MySQL表多条数据?
解决方案
1. 修复前端JS逻辑错误
你当前获取发票编号的代码有误:<td>是普通文本元素,不能用.val()取值,需要改成.text(),修改后的提交逻辑如下:
var invoice_no_receipt = []; var invoice_amt_receipt = []; $('.invoice_no_receipt').each(function() { // 替换val()为text()获取td内的发票编号文本 invoice_no_receipt.push($.trim($(this).text())); }); $('.invoice_amt_receipt').each(function() { invoice_amt_receipt.push($.trim($(this).val())); }); $.ajax({ url: base_url + "index.php/welcome/savereciptfinal/", type: "POST", data: { "getinvnumber": invoice_no_receipt, "getinv_recived_amount": invoice_amt_receipt }, success: function(data) { // 后续成功逻辑自行补充 } });
2. 改写后端PHP批量更新逻辑
原来的代码只处理了单条数据,需要循环遍历前端传过来的数组批量更新,同时修复字段不匹配、变量未定义等问题,修改后代码如下:
public function savereciptfinal() { // 开启事务保证数据一致性 $this->db->trans_start(); $value2 = "0001"; // 这里替换为你实际的自动生成receiptID的逻辑 $data = array( 'rece_No' => $value2 ); $this->db->insert("receipt_details", $data); $insert_id = $this->db->insert_id(); // 获取前端传的两个数组 $inv_numbers = $this->input->post('getinvnumber'); $received_amts = $this->input->post('getinv_recived_amount'); // 遍历批量更新,两个数组下标一一对应 if (!empty($inv_numbers) && count($inv_numbers) == count($received_amts)) { foreach ($inv_numbers as $key => $inv_id) { $update_data = array( // 字段名要和你的invoice_details表对应 'received_amount' => $received_amts[$key], 'receiptID' => $value2 ); $this->db->where('invoice_number', $inv_id); $this->db->update('invoice_details', $update_data); } } // 提交事务 $this->db->trans_complete(); // 返回操作结果,可自行扩展 if ($this->db->trans_status() === FALSE) { echo json_encode(['code'=>0,'msg'=>'保存失败']); } else { echo json_encode(['code'=>1,'msg'=>'保存成功']); } }
注意事项
- 上述代码中数据库字段名已匹配你提供的
invoice_details表结构,如果实际字段名有差异请自行调整 - 建议增加参数校验逻辑,比如判断实收金额是否为合法数值、发票编号是否存在,避免无效数据写入
- 你示例中的receiptID生成逻辑是固定值0001,请替换为你实际的自动生成唯一编号的逻辑
内容的提问来源于stack exchange,提问作者Remesh sree
相关产品推荐
相关产品推荐

