views:

34

answers:

1

Hi there I am having a problem with my form validation, basically the problem is that I am getting a repeated view loaded if the validation fails, please see my code snippet,

else {
            //the user is a new customer so we need to show them 
            //the card details form
            $this->addViewData('returningCustomer', false);
            $this->load->library('form_validation');
            if($this->input->post('carddetails') == 'Submit') {
                $this->form_validation->set_rules('inpcardtype', 'Card type', 'cardTypeCheck'); //custom callback
                $this->form_validation->set_rules('inpcardnumber', 'Card number', 'required|trim|exact_length[16]');
                $this->form_validation->set_rules('startmonth', 'Start month', 'trim|required');
                $this->form_validation->set_rules('startyear', 'Start year', 'trim|required');
                $this->form_validation->set_rules('endmonth', 'End month', 'trim|required');
                $this->form_validation->set_rules('endyear', 'End year', 'trim|required');
                $this->form_validation->set_rules('inpissuenumber', 'Issue number', 'trim|integer');
                $this->form_validation->set_rules('inpccv', 'CCV Code', 'required|trim|exact_lenght[3]');
                if($this->form_validation->run() == FALSE) {
                    $this->renderTemplate('cv/search/pf_shortlist.php', $this->viewData);
                } else {
                    // validation is passed we need to safe the user details
                    // it is probable that we will need to hash the users card details
                    //@TODO: HASH USER CARD DETAILS LEAVE ONLY THE FINAL DIGITS
                    $this->load->model('checkout_model');
                }
            }
            $this->renderTemplate('cv/search/pf_shortlist.php', $this->viewData);

basically if a condtion fails futher up the script a view is loaded with a form, the form is submitted and if validation fails the user is passed back to the form but is show the errors, however the original view is also present. Can I stop it doing this?

+1  A: 

After

$this->renderTemplate('cv/search/pf_shortlist.php', $this->viewData);

You should do return; as after the else statement theres another view loading.#

        //the user is a new customer so we need to show them 
        //the card details form
        $this->addViewData('returningCustomer', false);
        $this->load->library('form_validation');
        if($this->input->post('carddetails') == 'Submit') {
            $this->form_validation->set_rules('inpcardtype', 'Card type', 'cardTypeCheck'); //custom callback
            $this->form_validation->set_rules('inpcardnumber', 'Card number', 'required|trim|exact_length[16]');
            $this->form_validation->set_rules('startmonth', 'Start month', 'trim|required');
            $this->form_validation->set_rules('startyear', 'Start year', 'trim|required');
            $this->form_validation->set_rules('endmonth', 'End month', 'trim|required');
            $this->form_validation->set_rules('endyear', 'End year', 'trim|required');
            $this->form_validation->set_rules('inpissuenumber', 'Issue number', 'trim|integer');
            $this->form_validation->set_rules('inpccv', 'CCV Code', 'required|trim|exact_lenght[3]');
            if($this->form_validation->run() == FALSE) {
                $this->renderTemplate('cv/search/pf_shortlist.php', $this->viewData);
                return;// HERE
            } else {
                // validation is passed we need to safe the user details
                // it is probable that we will need to hash the users card details
                //@TODO: HASH USER CARD DETAILS LEAVE ONLY THE FINAL DIGITS
                $this->load->model('checkout_model');
            }
        }
        $this->renderTemplate('cv/search/pf_shortlist.php', $this->viewData);
        return;
RobertPitt