phpcodeignitercodeigniter-form-helper

CodeIgniter form_validation->run() always returns false?


I'm new to CodeIgniter and I've been trying to implement a form submitting function, however whenever I press "submit" the form page simply refreshes and the database is not updated! It seems that the $this->form_validation->run() is always returning false, but I have no idea why.

The controller function is as follows:

public function write_prof_review($prof_id)
    {
        $this->load->model('Queries');
        // form stuff here
        $this->load->helper('form');
        $this->load->library('form_validation');

        $data['prof_id'] = $prof_id;
        if($this->form_validation->run() == FALSE){
            $this->load->view('create_prof_review', $data);
        }
        else {
            $this->Queries->submit_prof_review($prof_id, $this->USERID);
            $this->load->view('form_submitted');
        }       
    }

And here is the function submit_prof_review() in the model:

function submit_prof_review($prof_id, $user_id)
    {
        $data = array(
            'course_code' => $this->input->post('course_code'),
            'easiness' => $this->input->post('easiness'),
            'helpfulness' => $this->input->post('helpfulness'),
            'clarity' => $this->input->post('clarity'),
            'comment' => $this->input->post('comment')
        );

    $average = round((($data['easiness'] + $data['helpfulness'] + $data['clarity'])/3),2);
    date_default_timezone_set('Asia/Hong_Kong');
    $date = date('m/d/Y h:i:s a', time());

    $data['average'] = $average;
    $data['date'] = $date;
    $data['course_id'] = 0; 

    return $this->db->insert('review_prof', $data);
}

And finally the view for the form (create_prof_review.php):

<h2>Write a review</h2>
<?php echo form_open('home/write_prof_review/'.$prof_id); ?>
<h3>Course code
<input type = 'text' name = 'course_code'></h3>
<h3>Easiness
<input type = 'text' name = 'easiness'></h3>
<h3>Helpfulness
<input type = 'text' name = 'helpfulness'></h3>
<h3>Clarity
<input type = 'text' name = 'clarity'></h3>
<h3>Comment</h3>
<textarea name = 'comment' rows = '4' cols = '50'></textarea>
<br>
<input type = 'submit' name = 'submit' value = 'Submit'>
</form>

Been stuck on this for a couple of days, but I still can't figure out what's wrong. Any help would be greatly appreciated!


Solution

  • I think this is happening because you have not set any validation rules. Controller code should look like this:

    public function write_prof_review($prof_id)
    {
        $this->load->model('Queries');
        // form stuff here
        $this->load->helper('form');
        $this->load->library('form_validation');
    
        $data['prof_id'] = $prof_id;
    
        // here it is; I am binding rules 
    
        $this->form_validation->set_rules('course_code', 'Course Code', 'required');
        $this->form_validation->set_rules('easiness', 'easiness', 'required');
        $this->form_validation->set_rules('helpfulness', 'helpfulness', 'required');
    
        if($this->form_validation->run() == FALSE) {
            $this->load->view('create_prof_review', $data);
        }
        else {
            $this->Queries->submit_prof_review($prof_id, $this->USERID);
            $this->load->view('form_submitted');
        }
    }
    

    Please refer to the CodeIgniter user guide; it will give you more information about validation rules.