当方法是POST时如何传递和捕获变量然后路由是GET?

问题描述 投票:0回答:2

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

我在这里使用Codeigniter框架,我试图用$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>

我期望的是来自Sender的输入id值将被传递并且在Recipient表单上捕获作为输入idClient。任何人都可以帮助我找出解决方案吗?谢谢。

php codeigniter
2个回答
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);
    }

0
投票

在调用id方法后,您忘记在重定向上包含save()数据,因此您不会通过调用$this->input->get('id')获得任何内容。

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

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

但那当然会在网址上给你一个额外的参数。如果你不想要额外的参数,你也可以使用session在重定向时传递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');
© www.soinside.com 2019 - 2024. All rights reserved.