Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Codeigniter form post and validation

I'm not a pro, but know my way around PHP, I'm new to Codeigniter.

Been going through these tutorials: http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/

OK, so I have a page that lists users, clicking on users name will go to an edit page, the url of that page being: index.php/users/edit/1 (where 1 is the users id)

On edit page is a form, this form contains a few parts, each part is populated from different tables in the DB. So my Controller for edit is as follows:

function edit() {

        //load model
        $this->load->model('users_model');

        //assign user data from DB 
        $data['data_user'] = $this->users_model->getUser($this->uri->segment(3));
        //get users Password, using username from above
        $data['data_user_password']= $this->users_model->getUserPassword($data['data_user'][0]->UserName);

        $data['page_content'] = 'pages/users_edit';
        $this->load->view('template/template', $data);
    }

Notice: $data['data_user'] contains users data like name, username, email $data['data_user_password'] contains users password from a different table

I can then populate the form, on users_edit.php, this all works fine. I'm accessing this data by doing the following:

if (is_array($data_user)) {
    foreach($data_user as $user) 
    {
        $userID         = $user->id;
        $userName       = $user->Name;
        $userUserName   = $user->UserName;
        $userMail       = $user->Mail;
        $userDepartment = $user->Department;
        $userWorkPhone  = $user->WorkPhone;
        $userHomePhone  = $user->HomePhone;
        $userMobile     = $user->Mobile;

    }
}
//user password
if (is_array($data_user_password)) {
    foreach($data_user_password as $user) 
    {
        $userPassword   = $user->value;
    }
}

Name: 
<?php echo form_input('name', set_value('name', $userName), 'id="name" class="inputLong"'); ?>

When I post, I'm sending data to: index.php/users/update

My controller for this page so far is:

function update() {

        echo '<pre>';
        print_r($_POST);
        echo '</pre>';
        //exit();

        $this->load->library('form_validation');

        $this->form_validation->set_rules('name', 'Name', 'trim|required');

        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('pages/users_edit');
        }
        else
        {
            $this->index();
        }

    }

For now, I'm just testing validation on users "name" where form input=name id=name

I think I'm not handling the if ($this->form_validation->run() == FALSE) part of it correctly, if the form contains data, it passes and redirects to index, if I leave name blank it either not handling the edit page correctly, or I dont know, something isnt right.. I think its because the page is being reloaded using the post array, and not passing the $data like I did in function edit().

Back to the form page, where it should be showing the validation_errors, its showing:

The Name field is required.

This is correct, however, for the rest of the fields that should be pre-populated, its showing PHP error:

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: userUserName

Filename: pages/users_edit.php

Line Number: 50
like image 802
Mark Avatar asked Nov 12 '22 07:11

Mark


1 Answers

You could do your validation inside your edit function instead of having an update function, that way, your data is still available for your view and if the validation has errors, codeigniter will take in charge to repopulate your fields. If the validation is ok, you do your next step

function edit() {

    //load model
    $this->load->model('users_model');

    //assign user data from DB 
    $data['data_user'] = $this->users_model->getUser($this->uri->segment(3));
    //get users Password, using username from above
    $data['data_user_password']= $this->users_model->getUserPassword($data['data_user'][0]->UserName);

    $data['page_content'] = 'pages/users_edit';
    $this->load->view('template/template', $data);

    //is the form submitted
    if(form submit){
         if ($this->form_validation->run() == TRUE)
         {
             $this->index();
         }
         else
         {
         $this->load->view('pages/users_edit', $data);
         }
    }
}
like image 199
isabelfr Avatar answered Nov 15 '22 01:11

isabelfr