Tank Auth Добавление полей

Я работал с библиотекой Tank Auth весь день и у меня есть вопрос по этому поводу. Я добавил два поля в форму регистрации: first_name и last_name соответственно, и я пытаюсь выяснить, почему его не вставляют на страницу user_profiles.

С обновленным кодом я получаю эту ошибку:

Обнаружена ошибка PHP

Серьезность: Предупреждение

Сообщение: отсутствует аргумент 5 для Tank_auth::create_user(), вызванный в /home/xtremer/public_html/kowmanager/application/controllers/auth.php в строке 136 и определенный

Имя файла: библиотеки /Tank_auth.php

Номер строки: 162 Обнаружена ошибка PHP

Серьезность: Уведомление

Сообщение: неопределенное свойство: Tank_auth::$users

Имя файла: библиотеки /Tank_auth.php

Номер строки: 188

Неустранимая ошибка: вызов функции-члена UpdateProfileInfo() для необъекта в /home/xtremer/public_html/kowmanager/application/libraries/Tank_auth.php в строке 188

Обновленный код:

Auth Controller

Tank Auth Library

Модель пользователей

Любые идеи о том, что я делаю не так сейчас?

Я возложу на это вознаграждение в 50 баллов, но не могу получить ссылку, чтобы получить вознаграждение.

3 ответа

Решение

То, что вы должны сделать, это поместить два нужных столбца в user_profiles таблицу, затем добавьте функцию к models/tank_auth/users.php с чем-то вроде:

function UpdateProfileInfo ($userID, $firstname, $lastname)
{
    return $this->db->update('user_profiles', array('firstname'=>$firstname, 'lastname'=>$lastname), array('user_id' => $userID)); 
}

Затем заменить (в /libraries/Tank_auth.php)
function create_user($username, $email, $password, $email_activation)
С
function create_user($username, $email, $password, $email_activation, $userInfo)

Тогда прямо под (в /libraries/Tank_auth.php)
if (!is_null($res = $this->ci->users->create_user($data, !$email_activation))) {добавлять
$this->users->UpdateProfileInfo($userInfo["firstname"],$userInfo["lastname"]);

Затем заменить (в /controllers/auth.php)

        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('email'),
                    $this->form_validation->set_value('password'),
                    $email_activation))) {                                  // success

с:

$userInfo["firstname"] = $this->form_validation->set_value("firstname");
$userInfo["lastname"]  = $this->form_validation->set_value("lastname");

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('email'),
            $this->form_validation->set_value('password'),
            $email_activation, $userInfo))) {                                   // success

Это не проверено, хотя это должно работать, скажите мне, как это идет
Максимум

Я заметил пару вещей:

private function create_profile($user_id, $data)
{
    $this->db->set('user_id', $user_id);
    $this->db->set('first_name', $first_name);
    $this->db->set('last_name', $last_name);
    return $this->db->insert($this->profile_table_name);
}

$data это массив, я предполагаю, что вы должны пройти first_name а также last_name здесь (чего у вас нет).

Также TANK AUTH требует, чтобы вы обновили столбцы, необходимые для схемы базы данных профиля (вы сделали это? Не упомянул).

Чтобы исправить приведенный выше код, вам нужно передать больше деталей в массив ($data) вот так:

$data['first_name'] = "Bob";
$data['last_name']  = "Smith";

create_profile($user_id, $data); // which would then use the first & last names 

Не то чтобы я хотел продолжать разговор об этом, но... *

Вам нужно сделать только то, что я вам показал:

  • определить 2 переменные (имя и фамилия) и передать их create_profile п.
  • правильно использовать переменные (не используйте $data[0] это НЕДОСТАТОЧНО, делай $data['first_name'] если это то, что вы назвали значением массива. Нет причин быть неаккуратным и делать $data[0] - угадывая не меньше значения ключа вашего массива).
  • Это не сложно, прочитайте ваш код (поймите, если вы не сделаете шаг назад и постарайтесь разбить его на построчно, что происходит, я чувствую, что вы понятия не имеете, что делает любая из этих функций).

Проверьте файл Tank_auth в библиотеке, есть еще одна функция "create_user", которую вы должны изменить. Чтобы правильно управлять переменными. 3 часа ломаю голову с этим.

Другие вопросы по тегам