CodeIgniter - добавление данных в сессию - PullRequest
0 голосов
/ 12 марта 2012

Только начал изучать CodeIgniter и делать с ним небольшой проект. Я пытался добавить уровень пользователя к сеансу, но каждый раз, когда я пытаюсь повторить его, он ничего не отображает. Вот мой код модели:

function get_userlevel($username){
        $this->db->where('username',$username);
        $query = $this->db->get('users');
        foreach($query->result() as $row){
            $rows[] = $row;
        }
        return $rows;
}

И мой код контроллера:

$userlevel['records'] = $this->membership_model->get_userlevel($this->input->post('username'));

            $data = array(
                'username' => $this->input->post('username'),
                'userlevel' => $records['userlevel'],
                'logged_in' => true
            );

            $this->session->set_userdata($data);

И код для отображения уровня пользователя ->

<?php echo $this->session->userdata['userlevel'] ; ?>

Кто-нибудь может помочь этому нуби? :)

Ответы [ 2 ]

0 голосов
/ 12 марта 2012

используйте скобки для доступа к 'userdata' и присвойте их массиву, чтобы иметь возможность работать с тем, что он содержит.

<?php  
if($this->session->userdata('userlevel')) {
    $arr = $this->session->userdata('userlevel');
    var_dump($arr['username']);
    var_dump($arr['userlevel']);
    var_dump($arr['logged_in']);
}
?>
0 голосов
/ 12 марта 2012

Хотя $this->session->userdata['userlevel']; технически допустимо и, вероятно, должно работать, вы должны использовать вместо него функцию userdata(), если в будущем выпуске CI свойство класса Session userdata объявит как protected или private:

$this->session->userdata('userlevel');

Что еще более важно, ваша модель пытается найти слишком много результатов и возвращает массив результатов, а не только один. Попробуйте вместо этого:

function get_userlevel($username){
    $query = $this->db
        ->where('username', $username)
        ->limit(1)
        ->get('users');
    return $query->row();
}

row() возвращает одну строку или FALSE. До этого вы строили массив из множества строк (хотя ожидается только один). Я думаю, что это корень вашей проблемы.

Кроме того, в вашем коде есть небольшая дислексия. Вы не используете правильную переменную. Вы присваиваете результат модели для $userlevel['records'], а для сеанса присваиваете $records['userlevel'].

Для будущей отладки, var_dump($data), прежде чем передавать ее в сеанс, чтобы убедиться, что это то, что вы думаете, и всегда проверять, error_reporting() работает на полную мощность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...