PHP CodeIgniter:如何通过ID从控制器重定向并解决参数缺失错误
解决CodeIgniter保存数据后携带ID重定向的参数缺失错误
错误原因
出现以下错误提示:
Message: Too few arguments to function c_transaksi::tambah_shrinkage(), 0 passed in C:\xampp\htdocs\testresult\system\core\CodeIgniter.php on line 532 and exactly 1 expected
核心问题是控制器方法tambah_shrinkage($report_no)要求必须传入$report_no参数,但保存数据后的重定向操作未传递该参数;同时视图按钮的默认提交行为与JS后退逻辑冲突,导致页面跳转不符合预期。
解决方案
1. 修正控制器重定向逻辑
在tambahaksi_shrinkage方法中,先获取提交的report_no,并重定向时携带该参数:
public function tambahaksi_shrinkage() { $jumlah_shrinkage = count((array)$this->input->post('nama_shrinkage_hidden')); $data = []; // 提前获取report_no,确保重定向时可用 $report_no = $this->input->post('report_no'); for ($i = 0; $i < $jumlah_shrinkage; $i++){ array_push($data, ['nama_shrinkage' => $this->input->post('nama_shrinkage_hidden')[$i]]); $data[$i]['report_no'] = $report_no; $data[$i]['before_wash'] = $this->input->post('before_wash_hidden')[$i]; $data[$i]['after_wash1'] = $this->input->post('after_wash1_hidden')[$i]; $data[$i]['actual1'] = $this->input->post('actual1_hidden')[$i]; $data[$i]['after_wash3'] = $this->input->post('after_wash3_hidden')[$i]; $data[$i]['actual3'] = $this->input->post('actual3_hidden')[$i]; $data[$i]['after_wash15'] = $this->input->post('after_wash15_hidden')[$i]; $data[$i]['actual15'] = $this->input->post('actual15_hidden')[$i]; $data[$i]['c_shrinkage'] = $this->input->post('c_shrinkage_hidden')[$i]; } $this->m_transaksi->insert_shrinkage($data); // 重定向时携带report_no参数 redirect('c_transaksi/tambah_shrinkage/' . $report_no); }
2. 修复视图按钮冲突
原按钮同时设置type="submit"和onclick="history.go(-1);",会导致表单提交与JS后退同时触发,引发异常。根据使用场景二选一:
- 表单提交场景:去掉
onclick属性,由控制器完成重定向:
<button type="submit" class="btn btn-block bg-gradient-info" style="font-weight: bolder; font-size: 13px; color:aliceblue;">SUBMIT</button>
- AJAX提交场景:将按钮类型改为
button,避免默认提交行为:
<button type="button" id="simpanshrinkage" class="btn btn-block bg-gradient-info" style="font-weight: bolder; font-size: 13px; color:aliceblue;">SUBMIT</button>
3. 优化AJAX跳转逻辑
如果采用AJAX提交,成功后直接跳转到带参数的目标页面,而非依赖history.back()(可能导致页面状态异常):
$('#simpanshrinkage').on('click', function(){ var currentRow = $(this).closest("tr"); var report_no = currentRow.find("td:eq(0)").text(); const data_shrinkage = { report_no : report_no, nama_shrinkage : currentRow.find("td:eq(1)").text(), before_wash : currentRow.find("td:eq(2)").text(), after_wash1 : currentRow.find("td:eq(3)").text(), actual1 : currentRow.find("td:eq(4)").text(), after_wash3 : currentRow.find("td:eq(5)").text(), actual3 : currentRow.find("td:eq(6)").text(), after_wash15 : currentRow.find("td:eq(7)").text(), actual15 : currentRow.find("td:eq(8)").text(), c_shrinkage : currentRow.find("td:eq(9)").text() } $.ajax({ type: 'POST', url: "<?=site_url('c_transaksi/tambahaksi_shrinkage') ?>", data: data_shrinkage, success: function(data){ console.log("berhasil"); // 跳转到带report_no参数的目标页面 window.location.href = "<?=site_url('c_transaksi/tambah_shrinkage/')?>" + report_no; } }) })
内容的提问来源于stack exchange,提问作者iso ayu
相关产品推荐
相关产品推荐

