表单验证后,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
没有经验,麻烦各位了
定義到 http://localhost/flight/pndb 的是你的鏈結
你可以先判斷有沒有取得參數再進行下一步
if($id) 本帖最后由 nic 于 2015-1-21 11:15 编辑
看了两次 终于懂了- -, 不应该用$this->load->view();这个只是把页面文件读取出来显示,所以你的连接仍然停留在当前方法
而你需要的这东西 用site_url("flight/pndb/1");这样子进行跳转咯
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出错后的提示没有了。
嘛,先这样用着
Orient 发表于 2015-1-21 15:41
$this->load->view();是要加载pndb页面的,如果没有它,http://localhost/flight/pndb/1这样的页面都无法 ...
明明就是你奇怪...为啥执着这个get 写成post 然后hidden不就解决了吗?而且啊,可以用新的function 然后$this->function();这样子调用 不都可以解决你的问题吗
nic 发表于 2015-1-21 15:44
明明就是你奇怪...为啥执着这个get 写成post 然后hidden不就解决了吗?而且啊,可以用新的function 然后$th ...
谢谢,我还是没有什么经验,你这样说,又让我想到一个方法{:soso_e121:}
页:
[1]