I have research on their documentation, but why does this code won't work? Can someone help me?
$valid = array(
'menu' => array(
'field' => 'menu',
'label' => 'Menu',
'rules' => 'required'
),
'access_menu' => array(
'field' => 'access_menu_id',
'label' => 'Access Menu ID',
'rules' => 'required'
)
);
$this->form_validation->set_rules($valid);
if($this->form_validation->run() == false) {
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar', $data);
$this->load->view('templates/topbar', $data);
$this->load->view('menu/index', $data);
$this->load->view('templates/footer');
}elseif($this->form_validation->run('menu')){
if($this->input->post('id') > 0) {
$this->Menu_model->editMenu($this->input->post());
redirect('menu');
}else{
$this->Menu_model->addMenu($this->input->post());
$this->session->set_flashdata('message1', '<div class="alert alert-success" role="alert">
Menu added.
</div>');
redirect('menu');
}
}elseif($this->form_validation->run('access_menu')) {
if($this->input->post('access_id') > 0) {
$this->Menu_model->editAccessMenu($this->input->post());
redirect('menu');
}else{
$this->Menu_model->addAccessMenu($this->input->post());
$this->session->set_flashdata('message2', '<div class="alert alert-success" role="alert">
Menu added.
</div>');
redirect('menu');
}
}
The results always The Menu field is required. When I have clearly input access_menu_id
I think this happens on the first validation run. It's stated that "The Menu field is required", and by seeing at the $_POST
output, you haven't send any menu
field yet.
If you want to make either menu
or access_menu
custom rule works, you could reorder the $this->form_validation->run() == false
condition as the last validation :
if($this->form_validation->run('menu')){
if($this->input->post('id') > 0) {
$this->Menu_model->editMenu($this->input->post());
redirect('menu');
}else{
$this->Menu_model->addMenu($this->input->post());
$this->session->set_flashdata('message1', '<div class="alert alert-success" role="alert">
Menu added.
</div>');
redirect('menu');
}
}elseif($this->form_validation->run('access_menu')) {
if($this->input->post('access_id') > 0) {
$this->Menu_model->editAccessMenu($this->input->post());
redirect('menu');
}else{
$this->Menu_model->addAccessMenu($this->input->post());
$this->session->set_flashdata('message2', '<div class="alert alert-success" role="alert">
Menu added.
</div>');
redirect('menu');
}
} elseif($this->form_validation->run() == false) {
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar', $data);
$this->load->view('templates/topbar', $data);
$this->load->view('menu/index', $data);
$this->load->view('templates/footer');
}
Edit : Sorry, it doesn't work even if i rearrange it like the code below, it still shows the "The Menu field is required".
$valid = array(
'menu' => array(
'field' => 'menu',
'label' => 'Menu',
'rules' => 'required'
),
'access_menu' => array(
'field' => 'access_menu_id',
'label' => 'Access Menu ID',
'rules' => 'required'
)
);
$this->form_validation->set_rules($valid);
if($this->form_validation->run('access_menu')) {
if($this->input->post('access_id') > 0) {
$this->Menu_model->editAccessMenu($this->input->post());
redirect('menu');
}else{
$this->Menu_model->addAccessMenu($this->input->post());
$this->session->set_flashdata('message2', '<div class="alert alert-success" role="alert">
Menu added.
</div>');
redirect('menu');
}
}elseif($this->form_validation->run() == false) {
$this->load->view('templates/header', $data);
$this->load->view('templates/sidebar', $data);
$this->load->view('templates/topbar', $data);
$this->load->view('menu/index', $data);
$this->load->view('templates/footer');
}else{
if($this->input->post('id') > 0) {
$this->Menu_model->editMenu($this->input->post());
redirect('menu');
}else{
$this->Menu_model->addMenu($this->input->post());
$this->session->set_flashdata('message1', '<div class="alert alert-success" role="alert">
Menu added.
</div>');
redirect('menu');
}
}