如何在 PHP Codeigniter 中使用 ID 显示来自控制器的重定向 [duplicate]

How to show redirect from controller using ID in PHP Codeigniter [duplicate]

提问人:iso ayu 提问时间:11/9/2023 最后编辑:iso ayu 更新时间:11/10/2023 访问量:64

问:

我有一个按钮,但它就像生成 2 个函数。我想保存数据并重定向到之前使用 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

这里是控制器

public function tambah_shrinkage($report_no)
    {
        $this->data['detail'] = $this->m_transaksi->get_by_reportmaterial($report_no);
        $this->data['shrinkage'] = $this->m_transaksi->get_shrinkage();
        $this->template->load('admin/layout/templatetesting','admin/transaksi/shrinkage/tambah', $this->data);
    }

 public function tambahaksi_shrinkage()
    {
        $jumlah_shrinkage = count((array)$this->input->post('nama_shrinkage_hidden'));

        $data = [];
        for ($i = 0; $i < $jumlah_shrinkage; $i++){ 
            array_push($data, ['nama_shrinkage' => $this->input->post('nama_shrinkage_hidden')[$i]]);
            $data[$i]['report_no'] = $this->input->post('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);
        
        redirect('c_transaksi/tambah_shrinkage');
    }

这里是“查看”按钮

 <button type="submit" class="btn btn-block bg-gradient-info" style="font-weight: bolder; font-size: 13px; color:aliceblue;"  onclick="history.go(-1);">SUBMIT</button>

我尝试使用js history.back和ajax,但仍然遇到相同的错误

这里是 AJAX 代码

 $('#simpanshrinkage').on('click', function(){
              
                var currentRow =  $(this).closest("tr");

                const data_shrinkage = {
                    report_no : currentRow.find("td:eq(0)").text(),
                    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");

                       window.history.back();
                    }
                })
            })
php html ajax codeigniter

评论

0赞 Adi 11/9/2023
检查您的重定向是否需要传递参数tambah_shrinkagetambahaksi_shrinkage()
0赞 iso ayu 11/9/2023
嗨@Adi我已经检查并编辑了
0赞 Adi 11/9/2023
这段代码去哪里,或者更确切地说是哪个函数?redirect('c_transaksi/tambah_shrinkage');
0赞 iso ayu 11/9/2023
该功能将转到详细信息,在详细信息中,还有另一个页面用于根据 ID @Adi 填充
0赞 Adi 11/9/2023
所以你有一个这个函数的参数,对吧?您是否通过传递参数?tambah_shrinkage($report_no)redirect('c_transaksi/tambah_shrinkage');

答:

1赞 steven 11/9/2023 #1

看起来你可以这样灌输它:

  1. 你的 $.ajax POST 应该返回正确的 json

     public function tambahaksi_shrinkage() {
    
         /* Do whatever you want here */
    
         echo json_encode(['success' => true]);
    
         // this is not what you want to do inline:
         // redirect('c_transaksi/tambah_shrinkage');
    
         exit;
     }
    
  2. 在处理程序中检查“成功”,然后执行重定向

     $.ajax({
         type: 'POST',
         url: "<?=site_url('c_transaksi/tambahaksi_shrinkage') ?>",
         data:data_shrinkage,
         success: function(data){
            console.log("berhasil");
    
            if(data.success) {
                 window.location.href = "<?=site_url('c_transaksi/tambah_shrinkage') ?>";
                 return;
            }
    
            // do something here if !data.success
         },
         dataType: 'json' // its a good habit to tell jquery what kind of response you expect
     });
    
  3. 从方法中删除参数,并尝试通过 GET-Param 将其发送到终结点。我怀疑这类似于您的存储引擎last_insert_id。因此,请在 json 中返回它,并将其作为 GET-Param 发送回终结点。或者,您可以将其存储在终端节点中并从中读取它,但这取决于您的用例。$report_notambah_shrinkage$report_no$_SESSION$_SESSION

评论

0赞 Adi 11/10/2023
这如何解决错误?,只要 有一个强制参数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 expectedtambah_shrinkage($report_no)
0赞 steven 11/10/2023
@Adi这并不能解决错误。错误是微不足道的。我认为根本问题是对ajax请求和重定向的应用程序流程的完全误解。但我会编辑我的答案并添加有关缺失参数的提示。谢谢。