我有以下用于编辑供应商表单的控制器代码:
public function edit($supplier_id = NULL) {
if ($this->session->userdata ( 'username' ) === NULL) {
redirect ( 'login' );
} else {
// set validation rules
$this->form_validation->set_rules ( 'suppliers', 'Department', 'callback_combo_check' );
$this->form_validation->set_rules ( 'nome', 'Employee No', 'trim|required' );
$this->form_validation->set_rules ( 'morada', 'Employee Name', 'trim|required' );
$this->form_validation->set_rules ( 'cp', 'Employee Name', 'trim|required' );
$this->form_validation->set_rules ( 'localidade', 'Designation', 'trim|required' );
if ($this->form_validation->run () == FALSE) {
$data['supplier_data'] = $this -> Suppliers_model -> get_supplier($supplier_id);
if (empty($data['supplier_data'])) {
show_404();
}
$this->lang->load ( 'suppliers' );
$data['suppliers'] = $this->Suppliers_model->get_suppliers();
$data ['title'] = 'Dashboard';
$this->load->view ( 'templates/head', $data );
$this->load->view ( 'templates/menu' );
$this->load->view ( 'suppliers/edit', $data );
$this->load->view ( 'templates/scripts' );
$this->load->view ( 'templates/footer' );
} else {
// pass validation
$up_data = array (
'Tipo_Fornecedor' => $this->input->post ( 'suppliers' ),
'Nome_Fornecedor' => $this->input->post ( 'nome' ),
'Morada_Fornecedor' => $this->input->post ( 'morada' ),
'Codigo_Postal' => $this->input->post ( 'cp' ),
'Localidade' => $this->input->post ( 'localidade' )
);
// insert the form data into database
$this->db->where('Codigo_Fornecedor', $supplier_id);
$this->db->update( 'tabela_fornecedores', $up_data );
// display success message
$this->session->set_flashdata ( 'msg', '<div class="alert alert-success text-center">Supplier details updated to Database!!!</div>' );
redirect ('suppliers/edit/'.$supplier_id);
}
}
}
结果应该是在更新数据库之后,返回到带有OK消息的编辑表单,就像在控制器内部一样。问题是,当我重定向到url的末尾时,在这种情况下,它重定向到自己,重定向丢失了$suppliers_id参数,所以控制器遇到404错误,因为它找不到供应商的id。
的例子:www.site.com/suppliers/edit/1
1是供应商的id,它正确加载页面,我改变任何我需要的,提交表单,值更新,但当它到达重定向部分
redirect ('suppliers/edit/'.$supplier_id);
将转到www.site.com/suppliers/edit/,因为没有id,它将到达页面开头的404_show函数。
我做错了什么,为什么重定向与$suppliers_id失败?
问好努诺·里斯
url路由规则
$route['suppliers/edit/(:any)'] = 'suppliers/edit/$1';
首先感谢您的输入。
问题是:
当打开页面进行编辑时,我从uri段/$id(/3)中获得id。当强制发布语句的else{}部分时,所以链接上没有$id,给出404错误。
我只是添加了一个隐藏字段的形式,存储/$id时编辑表单加载。当发布时,到达else{}从发布中获取$id,然后将其用于查询和重定向。
一切正常。
再次感谢您的回复。
问好努诺·里斯