2010-01-09 3 views
0

У меня трудное время заставить это работать. Может быть, моя логика ошибается, но я думаю, что кто-то с большим опытом может мне помочь.Codeigniter: проверка формы при обновлении записей

У меня есть страница «http://domain.com/account/settings», где пользователи могут редактировать свою учетную информацию. Когда форма отправляется, она запускает метод «settings_save». Все это хорошо, если форма представляет успешно, однако, в случае, если одна из области не проверяет, то URL остается в «http://domain.com/account/settings_save» Я на самом деле хочу, чтобы остаться на http://domain.com/account/settings "

account.php контроллер

function settings() { 
    $data['records'] = $this->account_model->getAccountSettings("sam"); 
    $this->load->view('account_settings_view', $data); 
} 

function settings_save() { 
    $this->load->library('validation'); 

    $records['email'] = "trim|required|min_length[4]|xss_clean"; 
    $records['gender'] = "trim|required|xss_clean"; 
    $records['seeking'] = "trim|required|xss_clean"; 
    $records['marital_status'] = "trim|required|xss_clean"; 
    $records['kids'] = "trim|required|xss_clean"; 
    $records['drinking'] = "trim|required|xss_clean"; 
    $records['smoking'] = "trim|required|xss_clean"; 
    $records['ethnicity'] = "trim|required|xss_clean"; 
    $records['body_type'] = "trim|required|xss_clean"; 
    $records['zipcode'] = "trim|required|min_length[5]|numeric|xss_clean"; 

    $this->validation->set_rules($records); 

    if ($this->validation->run() == false) 
    { 
     $this->load->view('account_settings_view', $records);     
    } 

    else 
    { 
     $records = array(); 
     $records['email'] = $this->validation->email; 
     $records['gender'] = $this->validation->gender; 
     $records['seeking'] = $this->validation->seeking; 
     $records['marital_status'] = $this->validation->marital_status; 
     $records['kids'] = $this->validation->kids; 
     $records['drinking'] = $this->validation->drinking;      
     $records['smoking'] = $this->validation->smoking; 
     $records['ethnicity'] = $this->validation->ethnicity; 
     $records['body_type'] = $this->validation->body_type; 
     $records['zipcode'] = $this->validation->zipcode;  

     $this->account_model->saveAccountSettings("sam", $records); 
     $this->session->set_flashdata('message', 'Done. You have added new task.');    

     redirect('account/settings'); 
     //redirect('account/settings'); 
    } 
} 

account_settings_view.php вид

у меня есть следующие строки:

<?=form_open('account/settings_save');?> 

ответ

1

Вам нужно только одну функцию контроллера, что-то вроде этого:

function settings() { 

    $this->load->library('validation'); 
    $records['email'] = "trim|required|min_length[4]|xss_clean"; 
    $records['gender'] = "trim|required|xss_clean"; 
    $records['seeking'] = "trim|required|xss_clean"; 
    $records['marital_status'] = "trim|required|xss_clean"; 
    $records['kids'] = "trim|required|xss_clean"; 
    $records['drinking'] = "trim|required|xss_clean"; 
    $records['smoking'] = "trim|required|xss_clean"; 
    $records['ethnicity'] = "trim|required|xss_clean"; 
    $records['body_type'] = "trim|required|xss_clean"; 
    $records['zipcode'] = "trim|required|min_length[5]|numeric|xss_clean"; 

    $this->validation->set_rules($records); 

    if ($this->form_validation->run() == TRUE) { 
     $records = array(); 
     $records['email'] = $this->validation->email; 
     $records['gender'] = $this->validation->gender; 
     $records['seeking'] = $this->validation->seeking; 
     $records['marital_status'] = $this->validation->marital_status; 
     $records['kids'] = $this->validation->kids; 
     $records['drinking'] = $this->validation->drinking;      
     $records['smoking'] = $this->validation->smoking; 
     $records['ethnicity'] = $this->validation->ethnicity; 
     $records['body_type'] = $this->validation->body_type; 
     $records['zipcode'] = $this->validation->zipcode;  

     $this->account_model->saveAccountSettings("sam", $records); 
     $this->session->set_flashdata('message', 'Done. You have added new task.');    

    } 

    $data['records'] = $this->account_model->getAccountSettings("sam"); 
    $this->load->view('account_settings_view', $data); 
} 

Тогда в представлении:

<form method="post" action=''>

Это вывесит к себе.

+0

Похоже, я куда-то. Как насчет того, если проверка не проходит? Я предполагаю, что мне понадобится «еще». Если да, то как бы я справился с последними двумя строками кода, где вы загружаете представление? – luckytaxi

+1

Вам не нужен ник. Если проверка не удалась, будет загружен один и тот же вид и вернет строку (или несколько) и повторно заполнит ваши формы. Если он был успешным, ваша информация будет добавлена ​​в вашу базу данных и показано сообщение об успешном завершении. – Zack

+0

Спасибо, у меня была ошибка в моем коде, которая помешала этому. Это потрясающе, наконец, получило его работу. Благодаря! – luckytaxi

-2

Есть вероятность неудачной проверки формы, если там есть дополнительное пространство. Проверьте ниже, убедитесь, что у вас не было этой ошибки.

$this->form_validation->set_rules('sub_service ','Sub ServiceName','trim|required'); 
$this->form_validation->set_rules('sub_service','Sub Service Name','trim|required'); 

Не должно быть пробелов.