Значения, не сохраняемые в базе данных в аутентификации кода codeigniter
Я добавил два поля в регистрационную форму танка auth.Field с именами fname и lname. Я добавил то же самое в form_validation, как вы можете видеть файл контроллера. Но имя пользователя, пароль, электронная почта вводятся в базу данных ожидают fname и lname. Что не так в коде? Я проверил, если имя поля, они правильно. Проверка формы также работает, но имя поля базы данных также fname и lname. Может кто-то выяснить проблему. Давно сидел над этим, но не мог найти их работающими
Контроллер 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;
}
1 ответ
Здравствуйте еще раз, я сделал эту работу, не редактируя модель 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;
}
Теперь сохраните этот файл и перейдите в models / tank_auth / users.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);
}
Теперь перейдите в controllers/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) {...