我的模型中有一个函数,它检查登录表单中给定的凭据。它选择email
、senha
和tipo_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
框,在两种不同的类型之间进行选择。现在很容易检索值并做出选择。