在CodeIgniter 3中设置具有查询结果的会话值


Set session values with query result in CodeIgniter 3

我的模型中有一个函数,它检查登录表单中给定的凭据。它选择emailsenhatipo_pessoa。以下是功能:

public function find_credentials()
{
    $this->db
        ->select('email, senha, tipo_pessoa')
        ->from($this->table)
        ->where('email', $this->input->post('email'))
        ->where('senha', md5($this->input->post('password')));
    $query = $this->db->get();
    if ($query->num_rows() == 1) {
        return true;
    }
    return false;
}

位于我的控制器中的下一个函数将被执行,而与上一个函数的结果无关。它根据返回的结果决定要做什么:

public function validate_credentials()
{
    if ($this->Usuarios_fisica_model->find_credentials()) {
        $data = array();
        $data['email'] = $this->input->post('email');
        $this->session->set_userdata($data);
        $this->session->set_flashdata('message', 'Bem-vindo!');
        redirect('/', 'refresh');
    } else {
        $this->session->set_flashdata('message', 'Desculpe, credenciais inválidas');
        redirect('/');
    }
}

我需要在会话中存储tipo_pessoa,以确定用户应该重定向到哪个页面。我为两种不同类型的用户提供了两个不同的表,每种用户都有自己的页面。

编辑*

在建议的解决方案之后,我在头文件中添加了以下代码,以响应tipo_pessoa:

<div class="menu_login">
    <?php if ($this->session->userdata('email')) { ?>
        <span><?php echo $this->session->userdata('email'); ?></span>
        <span><?php echo $this->session->userdata('tipo_pessoa'); ?></span>
        <a href="<?php echo base_url('usuario/painel'); ?>" class="bt_entre">Ir ao Painel</a>
        <a href="<?php echo base_url('usuario/sair') ?>" class="bt_cadastre">Sair</a>
    <?php } else { ?>
        <span>Minha Conta</span>
        <a href="#" id="bt_entrar" class="bt_entre">Entre</a>
        <a href="<?php echo base_url('cadastro') ?>" class="bt_cadastre">Cadastre-se</a>
    <?php } ?>
</div>

在模型中使用此更改:

$query = $this->db->get();
return $query->result();

并对控制器进行此更改:

$data = $this->Usuarios_fisica_model->find_credentials();
if(!empty($data))
{
   $tipo_pessoa = $data[0]['tipo_pessoa']; //Get value of tipo_pessoa
   $this->session->set_userdata('tipo_pessoa', $tipo_pessoa);//Set value in session
   //your if part code
}
else
{
   //your else part code
}

以下是如何根据查询结果设置会话数据的示例:

function get_something()
{
   $this->db->select('something'); 
   $something = $this->db->get('table')->row();
   $this->session->set_userdata('something',$something);
}

使用您的示例模型:

$this->db
    ->select('email, senha, tipo_pessoa')
    ->from($this->table)
    ->where('email', $this->input->post('email'))
    ->where('senha', md5($this->input->post('password')));
$query = $this->db->get();
if ($query->num_rows() == 1) {
    return $query->result_array();
}
return false;

控制器:

if ($something = $this->Usuarios_fisica_model->find_credentials()) {
    $data = array();
    $data['email'] = $this->input->post('email');
    $this->session->set_userdata('tipo_pessoa', $something['tipo_pessoa']);
    $this->session->set_userdata($data);
    $this->session->set_flashdata('message', 'Bem-vindo!');
    redirect('/', 'refresh');
} else {
    $this->session->set_flashdata('message', 'Desculpe, credenciais inválidas');
    redirect('/');
}

我没有做我想做的事情,而是在登录页面中放了一个select框,在两种不同的类型之间进行选择。现在很容易检索值并做出选择。