当方法为POST则路由为GET时如何传递和捕获变量?

时间:2019-03-28 04:09:19

标签: php codeigniter

我正在开发一个Web应用程序,并且当表单方法为post并链接到其他表单时,我想传递一个名为ID的变量,但是在config/routes中,我正在使用{{1 }}不是$routes[page_A][get] = 'Controller'

我在这里使用Codeigniter框架,我试图用$routes[page_A][post] = 'Controller'更改控制器,但是它不起作用,我也不知道代码中到底发生了什么。

发件人表单查看代码

$this->input->get('id')

发件人表单控制器代码

<form action="<?= base_url().'progres_save'; ?>" method="POST">
  <div class="form-group">
    <div class="form-row">
        <label for="idJobOrder">ID Job Order</label>
        <input type="text" name="idJobOrder" class="form-control" value="<?php echo $rd[0]->kodejobglobal; ?>" readonly>
   </div>
  </div>
  <div class="form-group">
    <div class="form-row">
       <a class="btn btn-primary col-xl-1 col-sm-1 mb-1 ml-auto mr-0 mr-md-2 my-0 my-md-3" href="job" id="back" role="button"><i class="fas fa-fw fa-arrow-left"></i> Back</a>
       <button class="btn btn-primary btn-block col-xl-1 col-sm-1 mb-1 mr-0 mr-md-2 my-0 my-md-3">Save <i class="fa fa-fw fa-arrow-right"></i></button>
       <input type="hidden" name="id" value="<?php echo $rd[0]->kodejobspesifik ?>">
     </div>
   </div>
</form>

配置路由代码

public function save()
    {
        $idglobal = $this->input->post('idJobOrder');

        $data = array('jobnya' => $idglobal );

        $this->Model_joborder->save_pg($data,'lapharian');
        redirect('progres_material');
    }

收件人表单控制器代码

$route['progres_save']['get']='error';
$route['progres_save']['post']='save';

$route['progres_material']['get']='matused';
$route['progres_material']['post']='error';

收件人表单查看代码

public function matused()
    {
        $id = $this->input->get('id');
        $data['rd'] = $this->Model_joborder->tampil2($id);
        $data['fb'] = $this->Model_joborder->data_cbb();
        $this->load->view('matused', $data);
    }

我期望的是来自发件人的输入<form method="POST" action="<?= base_url().'matsave'; ?>"> <div class="form-group"> <div class="form-row"> <?php if (isset($rd[0])) {?> <input type="hidden" value="<?php echo $rd[0]->jobspesifiknya; ?>" name="idClient" class="form-control" placeholder="First name" readonly> <?php } ?> </div> </div> </form> 值将被传递并以收件人形式进入输入id。她有人可以帮助我找出解决方案吗?谢谢。

2 个答案:

答案 0 :(得分:0)

如果不确定此类请求类型,可以使用PHP全局变量$_REQUEST捕获数据,

public function matused()
    {
        $id = $_REQUEST['id'];
        $data['rd'] = $this->Model_joborder->tampil2($id);
        $data['fb'] = $this->Model_joborder->data_cbb();
        $this->load->view('matused', $data);
    }

答案 1 :(得分:0)

在调用id方法之后,您忘记在重定向中包含save()数据,因此调用$this->input->get('id')将不会得到任何结果。

要解决此问题,请将id数据与重定向一起传递:

redirect('progres_material?id=' . $this->input->post('id'));

但是,那当然会为您提供url上的额外参数。如果您不希望使用其他参数,则可以选择使用会话在重定向时传递id数据,在CodeIgniter上,有一种名为set_flashdata的方法可以做到这一点:

$this->session->set_flashdata('id', $this->input->post('id'));
redirect('progres_material');

要在id方法上获取matused()会话数据,请使用以下代码:

$id = !empty($this->session->flashdata('id')) ? $this->session->flashdata('id') : $this->input->get('id');