Orient 发表于 2015-1-20 22:13:30

表单验证后,url获取参数失败

对数据库里的一条数据进行修改,通过url传递id参数
像这样:http://localhost/flight/pndb/1,

pndb控制器这样写的:
public function pndb($id)
        {
                       $this->load->helper('form');
                       $this->load->library('form_validation');
                       $this->form_validation->set_rules('name','Name','required');

                       if($this->form_validation->run() === FALSE)
                       {
                               $data['ndb'] = $this->Flight_model->get_ndblocation($id);                              
                               $this->load->view('flight/pndb_view',$data);                              
                       }
                        else
                        {
                                $this->Flight_model->update_ndblocation();       
                                redirect('/flight/ndb/', 'refresh');                       
                        }
       
        }

现在问题是当验证不通过时 由$this->load->view('flight/pndb_view',$data); 这条语句会定义到http://localhost/flight/pndb,这样就没有参数传入了,
就会报错。


有没有办法构造view生产的url的值


或者有什么好的方法对数据里的数据进行update

没有经验,麻烦各位了

Closer 发表于 2015-1-21 09:33:29

定義到 http://localhost/flight/pndb 的是你的鏈結
你可以先判斷有沒有取得參數再進行下一步
if($id)

nic 发表于 2015-1-21 10:43:05

本帖最后由 nic 于 2015-1-21 11:15 编辑

看了两次 终于懂了- -, 不应该用$this->load->view();这个只是把页面文件读取出来显示,所以你的连接仍然停留在当前方法
而你需要的这东西 用site_url("flight/pndb/1");这样子进行跳转咯

Orient 发表于 2015-1-21 15:41:18

nic 发表于 2015-1-21 10:43
看了两次 终于懂了- -, 不应该用$this->load->view();这个只是把页面文件读取出来显示,所以你的连接仍然停 ...

$this->load->view();是要加载pndb页面的,如果没有它,http://localhost/flight/pndb/1这样的页面都无法显示

不过你的建议让我产生了一个想法
        public function pndb($id = FALSE)
        {
                        if ($id === FALSE)
                        {
                                $id = $this->input->post('id');
                                redirect('/flight/pndb/'.$id, 'refresh');
                        }
                       $this->load->helper('form');
                       $this->load->library('form_validation');
                       $this->form_validation->set_rules('name','Name','required');

                       if($this->form_validation->run() === FALSE)
                       {
                               $data['ndb'] = $this->Flight_model->get_ndblocation($id);                              
                               $this->load->view('flight/pndb_view',$data);                              
                       }
                        else
                        {
                                $this->Flight_model->update_ndblocation();       
                                redirect('/flight/ndb/', 'refresh');                       
                        }       
        }

就是先判断$id的值,不存在的话,用页面传回来的值代替,然后重定向到那个界面,这样的缺点是validation出错后的提示没有了。
嘛,先这样用着

nic 发表于 2015-1-21 15:44:48

Orient 发表于 2015-1-21 15:41
$this->load->view();是要加载pndb页面的,如果没有它,http://localhost/flight/pndb/1这样的页面都无法 ...

明明就是你奇怪...为啥执着这个get 写成post 然后hidden不就解决了吗?而且啊,可以用新的function 然后$this->function();这样子调用 不都可以解决你的问题吗

Orient 发表于 2015-1-21 15:48:06

nic 发表于 2015-1-21 15:44
明明就是你奇怪...为啥执着这个get 写成post 然后hidden不就解决了吗?而且啊,可以用新的function 然后$th ...

谢谢,我还是没有什么经验,你这样说,又让我想到一个方法{:soso_e121:}
页: [1]
查看完整版本: 表单验证后,url获取参数失败