2014-02-24 2 views
0

У меня есть профиль профиля пользователя, который позволяет пользователю изменять свою информацию.Codeigniter с обновлением резервуара db table

Все, кажется, работает нормально, за исключением случаев, когда форма отправлена, и таблица профилей обновилась, но поля ввода, в которых отображалась информация пользователя, не обновлялись. Он все еще отображает старую информацию. Но если я снова обновляю страницу, она отображает правильную.

Есть ли способ получить новую информацию для отображения сразу после отправки?

Вот мой код: Tank_auth:

function edit_user_profile($avatar, $gender, $country) 
{ 
    $user_id = $this->ci->session->userdata('user_id'); 

    $data = array(
     'avatar' => $avatar, 
     'gender' => $gender, 
     'country' => $country, 
    ); 

    $this->ci->users->edit_user_profile($user_id, $data); 

    return NULL; 
} 

Контроллер:

function edit_profile() 
{ 
    if (!$this->tank_auth->is_logged_in()) {        // not logged in or not activated 
     redirect('/login/'); 

    } else { 
     // Get profile data 
     $profile = $this->users->get_user_profile_by_id($this->tank_auth->get_user_id()); 
     $data['avatar_'] = $profile->avatar; 
     $data['gender_'] = $profile->gender; 
     $data['country_'] = $profile->country; 

     $this->form_validation->set_rules('avatar', 'Avatar', 'trim|required'); 
     $this->form_validation->set_rules('country', 'Country', 'trim|required'); 
     $this->form_validation->set_rules('gender', 'Gender', 'trim|required'); 

     $data['errors'] = array(); 

     if ($this->form_validation->run()) {       // validation ok 
      // Get input fields value 
      $avatar = $this->form_validation->set_value('avatar'); 
      $country = $this->form_validation->set_value('country'); 
      $gender = $this->form_validation->set_value('gender'); 

      $this->tank_auth->edit_user_profile($avatar, $gender, $country); 

     } else { 
      $errors = $this->tank_auth->get_error_message(); 
      foreach ($errors as $k => $v) $data['errors'][$k] = '<p>'.$this->lang->line($v).'</p>'; 
     } 

     $this->load->view('auth/edit_profile_form', $data); 
    } 
} 

Модель:

function edit_user_profile($user_id, $data) 
    { 
     $this->db->set('avatar', $data['avatar']); 
     $this->db->set('gender', $data['gender']); 
     $this->db->set('country', $data['country']); 
     $this->db->where('user_id', $user_id); 

     $this->db->update($this->profile_table_name, $data); 
     return $this->db->affected_rows() > 0; 
    } 

ответ

2

Причина, почему вы видите старые данные после отправки формы есть порядок операции, которые вы выполняете в контроллере:

  1. пользователь чтения данных из базы данных и хранить в массиве данных $
  2. пользовательские обновления данных в БД (если действует)
  3. показать вид с данными $ данных - это старый, даже если обновленная база данных

Решение довольно простое - измените порядок. Переместите данные загрузки кода, чтобы они были после изменения (2 -> 1 -> 3). Вы также можете обновить переменную $ data после обновления db, зависит от вас.

+0

Спасибо! Он отлично работает после того, как я положил информацию о пользователе в конце. –

+0

Вы приветствуете :-) –