2014-02-06 2 views
0

Я добавил два поля в регистрационную форму tank auth.Field с именем fname и lname. Я добавил то же самое в form_validation, как вы можете видеть файл контроллера. Но имя пользователя, пароль, адрес электронной почты вставляется в базу данных ожидать fname и lname.Что не так в коде? Я проверил, есть ли имя поля, они правильны. Валидация формы также работает, но имя поля базы данных также является именем fname и lname.Can кто-то выясняет проблему. Вы сидите на этом в течение длительного времени, но не можете найти их работуЗначения, которые не сохраняются в базе данных в codeignitor tank auth

Auth.php контроллер

if ($use_username) { 
       $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean|min_length['.$this->config->item('username_min_length', 'tank_auth').']|max_length['.$this->config->item('username_max_length', 'tank_auth').']|alpha_dash'); 
      } 
      $this->form_validation->set_rules('email', 'Email', 'trim|required|xss_clean|valid_email'); 
      $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|min_length['.$this->config->item('password_min_length', 'tank_auth').']|max_length['.$this->config->item('password_max_length', 'tank_auth').']|alpha_dash'); 
      $this->form_validation->set_rules('confirm_password', 'Confirm Password', 'trim|required|xss_clean|matches[password]'); 
      $this->form_validation->set_rules('fname', 'First Name', 'trim|required|xss_clean'); // I added 
      $this->form_validation->set_rules('lname', 'Last Name', 'trim|required|xss_clean'); //I added 


      $captcha_registration = $this->config->item('captcha_registration', 'tank_auth'); 
      $use_recaptcha   = $this->config->item('use_recaptcha', 'tank_auth'); 
      if ($captcha_registration) { 
       if ($use_recaptcha) { 
        $this->form_validation->set_rules('recaptcha_response_field', 'Confirmation Code', 'trim|xss_clean|required|callback__check_recaptcha'); 
       } else { 
        $this->form_validation->set_rules('captcha', 'Confirmation Code', 'trim|xss_clean|required|callback__check_captcha'); 
       } 
      } 
      $data['errors'] = array(); 

      $email_activation = $this->config->item('email_activation', 'tank_auth'); 

      if ($this->form_validation->run()) {        // validation ok 
       if (!is_null($data = $this->tank_auth->create_user(
         $use_username ? $this->form_validation->set_value('username') : '', 
         $this->form_validation->set_value('fname'),//I added 
         $this->form_validation->set_value('lname'), 
         $this->form_validation->set_value('email'), 
         $this->form_validation->set_value('password'), 
         $email_activation))) 

user.php модель

function create_user($data, $activated = TRUE) 
    { 
     $data['created'] = date('Y-m-d H:i:s'); 
     $data['activated'] = $activated ? 1 : 0; 

     if ($this->db->insert($this->table_name, $data)) { 
      $user_id = $this->db->insert_id(); 
      if ($activated) $this->create_profile($user_id); 
      return array('user_id' => $user_id); 
     } 
     return NULL; 
    } 

ответ

0

Здравствуйте, снова я сделал эту работу, не редактируя модель TA. Что я сделал Я позволил TA выполнить эту работу и сразу после создания create_user() Я делаю обновление для этого недавно созданного_защика с дополнительной информацией, в которой я нуждался (имя, фамилия, пол ...)

Итак, откройте до

/libraries/Tank_auth.php

и добавить этого метода

/** 
* Update user information on site (user_profile) 
* make sure keys of array match table fields to update 
* @param integer 
* @param array 
* @return NULL 
*/ 

function update_profile($user_id, $data) 
{ 
    $this->ci->users->update_profile($user_id, $data); 
    return NULL; 
} 

прокрутки function create_user(...) добавить как последний параметр $user_data так функционировать декларация выглядит следующим образом

function create_user($username, $email, $password, $email_activation, $user_data) {...}

и редактировать код, как это (внутри метода CREATE_USER)

if (!is_null($res = $this->ci->users->create_user($data, !$email_activation))) { 
     $data['user_id'] = $res['user_id']; 
     $data['password'] = $password; 
     unset($data['last_ip']); 
     $this->update_profile($data['user_id'], $user_data); //this line is important! 
     return $data; 
} 

Теперь сохраните этот файл и перейти к моделей/tank_auth/пользователей. php, создайте этот метод

/** 
* Update profile for a user 
* 
* @param int 
* @param array 
* @return bool 
*/ 
function update_profile($user_id, $data) 
{ 

    $this->db->where('id', $user_id); 
    $this->db->update($this->profile_table_name, $data); 
} 

N вл перейти к контроллеры/auth.php

найти register() метод

и поиск (это нижняя часть вашего кода вы вывесили здесь)

if ($this->form_validation->run()) {        // validation ok 
       if (!is_null($data = $this->tank_auth->create_user(
         $use_username ? $this->form_validation->set_value('use... 

и изменить его так, похоже, это

if ($this->form_validation->run()) {         
       $user_data = array(
        'first_name' => set_value('fname'), 
        'last_name' => set_value('lname'), 
        ); // <- IMPORTANT 
       if (!is_null($this->data = $this->tank_auth->create_user(
         $use_username ? $this->form_validation->set_value('username') : '', 
         $this->form_validation->set_value('email'), 
         $this->form_validation->set_value('password'), 
         $email_activation, $user_data))) {         

        $this->data['site_name'] = $this->config->item('website_name', 'tank_auth'); 

        if ($email_activation) {...