2010-01-09 4 views
0

J'ai du mal à faire fonctionner ça. Peut-être que ma logique est fausse, mais je pense que quelqu'un avec plus d'expérience peut m'aider.Codeigniter: Validation de formulaire lors de la mise à jour des enregistrements

J'ai une page "http://domain.com/account/settings" où les utilisateurs peuvent modifier les informations de leur compte. Lorsque le formulaire est soumis, il déclenche la méthode "settings_save". Tout est très bien si la forme présente avec succès, cependant, dans le cas où l'un des champs ne valide pas, l'URL reste à « http://domain.com/account/settings_save » Je veux réellement rester sur http://domain.com/account/settings "

account.php contrôleur

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 vue

J'ai la ligne suivante:

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

Répondre

1

Vous avez seulement besoin d'une fonction de contrôleur, quelque chose comme ceci:

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); 
} 

Puis dans la vue:

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

Cela affichera à lui-même.

+0

On dirait que je vais quelque part. Que diriez-vous si la validation ne passe pas? Je suppose que je vais avoir besoin d'un "autre" là-dedans. Si oui, comment traiterais-je les deux dernières lignes du code où vous chargez la vue? – luckytaxi

+1

Vous n'avez pas besoin d'autre chose. Si la validation échoue, la même vue sera chargée et renverra une chaîne (ou plusieurs) et remplira à nouveau vos formulaires. Si cela a été couronné de succès, vos informations seront ajoutées à votre base de données et le message de réussite s'affichera. – Zack

+0

Merci, j'ai eu une erreur dans mon code qui a empêché cela. C'est génial, ça a finalement fonctionné. Merci! – luckytaxi

-2

Il y a des chances d'échouer à la validation d'un formulaire s'il y a de l'espace supplémentaire. Vérifiez les ci-dessous assurez-vous que vous n'avez pas eu cette erreur.

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

Il ne doit pas y avoir d'espaces.

Questions connexes