用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1891|回复: 6
收起左侧

[已解决] 表单验证后,url获取参数失败

[复制链接]
发表于 2015-1-20 22:13:30 | 显示全部楼层 |阅读模式
对数据库里的一条数据进行修改,通过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

没有经验,麻烦各位了
发表于 2015-1-21 09:33:29 | 显示全部楼层
定義到 http://localhost/flight/pndb 的是你的鏈結
你可以先判斷有沒有取得參數再進行下一步
if($id)

点评

谢谢,你给了我一点提示  发表于 2015-1-21 15:36
发表于 2015-1-21 10:43:05 | 显示全部楼层
本帖最后由 nic 于 2015-1-21 11:15 编辑

看了两次 终于懂了- -, 不应该用$this->load->view();这个只是把页面文件读取出来显示,所以你的连接仍然停留在当前方法
而你需要的这东西 用site_url("flight/pndb/1");这样子进行跳转咯
 楼主| 发表于 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出错后的提示没有了。
嘛,先这样用着

发表于 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();这样子调用 不都可以解决你的问题吗
 楼主| 发表于 2015-1-21 15:48:06 | 显示全部楼层
nic 发表于 2015-1-21 15:44
明明就是你奇怪...为啥执着这个get 写成post 然后hidden不就解决了吗?而且啊,可以用新的function 然后$th ...

谢谢,我还是没有什么经验,你这样说,又让我想到一个方法{:soso_e121:}

本版积分规则