5
votes

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
2
Yes, the form page loads with this: <input id="name" class="inputLong" type="text" value="Mark" name="name">Mark
please make sure you have defined the "serUserName" variable?Suleman Ahmad
in $data_user, if you recieve the data for one user, then don't loop on it.B F
@Mark you don't send any variables to your view so you can't access them there.. $data_user doesn't exists so its not looped..Svetoslav
That means the if (is_array($data_user)) part of my code in my view is incorrect, what should that be?Mark

2 Answers

1
votes

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);
         }
    }
}
0
votes
$this->load->view('pages/users_edit');

Inside your function update(), after your validation you load view but you don't PASS any data variables to it. So you don't have any variables which you can access at your view file..

You have to set your variables the same way as in your function edit():

$this->load->view('template/template', $data);

Currently there is not set variable $data_user so you can't loop it and use it..