Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
eu tenho um sistema em CodeIgniter:
Areá de login > Index (Menu: cadastro de usuário, listar usuário, cadastro de produto, listar produtos).
O que eu quero fazer é logar com os usuários que cadastro, que são armazenados no banco de dados, sendo os usuarios divididos em 2 níveis os administradores e os comuns.
ondeo os comuns não podem, cadastrar usuário.
===Banco de Dados loja_virtual
== Estrutura da tabela usuario
user_id int(11)
user_login varchar(10)
user_senha varchar(32)
user_admin tinyint(1)
user_nome varchar(100)
user_cidade varchar(50)
user_estado varchar(50)
por enquanto meu aquivo login.php esta assim:
<?php
class Login extends CI_Controller
{
function __construct()
{
parent::__construct();
}
public function index()
{
if($this->input->post('usuario') && $this->input->post('senha'))
{
$login_banco = "teste2";
$senha_banco = md5(123456);
$usuario = $this->input->post('usuario');
$senha = md5($this->input->post('senha'));
if(($usuario === $login_banco) && ($senha === $senha_banco))
redirect('admin/painel');
else
$this->load->view('layouts/admin.login.php',array('error' => 'erro'));
}
else
{
$this->load->view('layouts/admin.login.php');
}
}
}
nesse codigo abaixo tem o campo "Inserir Usuário" onde ele deve ser visivel apenas para administradores
admin.painel.php
<!-- MENU -->
<div id="menu" class="left">
<ul>
<li>
<h1><a href="<?=site_url('admin/painel')?>">Index</a></h1>
</li>
<li>
<ul>
<li><a href="<?=site_url('admin/user/insert')?>">Inserir Usuário</a></li>
<li><a href="<?=site_url('admin/user/manage')?>">Lista de Usuários</a></li>
</ul>
</li>
<li>
<ul>
<li><a href="<?=site_url('admin/produto/insert')?>">Inserir Produto</a></li>
<li><a href="<?=site_url('admin/produto/manage')?>">Lista de Produtos </a></li>
</ul>
</li>
<li>
<ul>
<li><a href="<?=site_url('application/controllers/admin/logout.php')?>">Sair</a></li>
</ul>
</div>
Sou iniciante no php quem poder dar uma foça dês de já agradeço.
>
Crie mais um campo com o nome de user_nivel varchar(100)
E depois somente ir fazendo regras de if e else
ja tenho criado no formulário o campo em radio (1) para administrador e (0) para user comun criando no banco de dados o user_admin
Um mais como você ira fazer esse sistema de gerenciamento de conteudo
você ira colocar um sub dominio para isso?
exemplo seu site
www.meusite.com.br
ai com o sub dominio criado ficaria
www.adm.meusite.com.br
Se sim somente fazer um sistema de login fazendo um if para verificar o nivel
se ele tiver nivel 1 ele longa como adm caso o contrario exibe uma mensagem
>
Um mais como você ira fazer esse sistema de gerenciamento de conteudo
você ira colocar um sub dominio para isso?
exemplo seu site
www.meusite.com.br
ai com o sub dominio criado ficaria
www.adm.meusite.com.br
Se sim somente fazer um sistema de login fazendo um if para verificar o nivel
se ele tiver nivel 1 ele longa como adm caso o contrario exibe uma mensagem
sem sub domínio acho que é melhor, mas como eu puxo o "user_login", "user_senha" do banco de dados e comparo com o digitado no campo login
No seu caso eu acharia melhor a criação de um sub dominio protegido por login e criar outra coluna assim
user_admin varchar(10)
user_senha_adm varchar(10)
Te daria menos trabalho pelo menos pelo meu ponto de vista
>
No seu caso eu acharia melhor a criação de um sub dominio protegido por login e criar outra coluna assim
user_admin varchar(10)
user_senha_adm varchar(10)
Te daria menos trabalho pelo menos pelo meu ponto de vista
eu não estou compreendendo sessa ideá de sub domínio direito deixar isso pra depois
vamos só fazer o sistema funcionar, como eu resgato os valores do banco de dados.
>
eu não estou compreendendo sessa ideá de sub domínio direito deixar isso pra depois
vamos só fazer o sistema funcionar, como eu resgato os valores do banco de dados.
Hum sistema de login no sistema usando o banco de dados você fala certo ?
Mais esse login servira para o adm e usuario ? ou somente para um dos dois?
>
Hum sistema de login no sistema usando o banco de dados você fala certo ?
Mais esse login servira para o adm e usuario ? ou somente para um dos dois?
Por enquanto eu estou definindo o login e senha como:
$login_banco = "teste2";
$senha_banco = md5(123456);
Mais eu possuo usuários cadastrados eu quero pegar esse "user_login", "user_senha" e comparar com o que e digitado no formulário, mais eu nunca trabalhei com banco de dados e estou fazendo um exercício pra ver se eu aprendo, e travei nessa parte.
Bom, seguinte, pelo que pude entender, você não está nem conseguindo recuperar os dados do BD é isso? Vejamos, posso esclarecer para você da seguinte forma:
Seu controller Login - Tem uma função [function] index que vai comparar os dados com os dados que vem do BD,$login_banco e $senha_banco deveriam vir do BD.
Você vai precisar criar um Model para recuperar esses dados. Recomendo que você leia a página do Manual do Codeigniter sobre "Models", creio que irá ser bastante esclarecedor. Se ainda assim não conseguir aí tentarei facilitar mais. Dá uma olhada aqui: Manual Codeigniter->Models
>
Bom, seguinte, pelo que pude entender, você não está nem conseguindo recuperar os dados do BD é isso? Vejamos, posso esclarecer para você da seguinte forma:
Seu controller Login - Tem uma função [function] index que vai comparar os dados com os dados que vem do BD,$login_banco e $senha_banco deveriam vir do BD.
Você vai precisar criar um Model para recuperar esses dados. Recomendo que você leia a página do Manual do Codeigniter sobre "Models", creio que irá ser bastante esclarecedor. Se ainda assim não conseguir aí tentarei facilitar mais. Dá uma olhada aqui: Manual Codeigniter->Models
consegui vlw você me ajudo pra caramba
fico assim
fiz um login_model.php
<?php
class Login_model extends CI_Model{
function ValidaLogin()
{
$this->db->where('user_login', $this->input->post('usuario'));
$this->db->where('user_senha', md5($this->input->post('senha')));
$query = $this->db->get('usuario');
if($query->num_rows == 1)
{
return true;
}
}
}
?>
e meu login.php
fico
class Login extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('admin/usermodel');
}
public function index() $this->load->model('login_model');//Carrega o model
$query = $this->login_model->ValidaLogin();//Chama a função da Model que checa o usuário no BD
if($query) //Se o Usuário e senha existir no mesmo registro...
{
$data = array(
'login' => $this->input->post('usuario'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('admin/painel');
}else // incorrect username or password
{
$this->load->view('layouts/admin.login.php');
}
}
}Falei que ia ser esclarecedor. O manual do Codeigniter é muito bom. Sempre que tiver dúvidas dá uma olhada lá primeiro.
Estou precisando de mais uma ajuda, estou montando uma lista de usuários onde quem for um "user comum" só pode editar o próprio perfil.
Eu tenho esse código onde listo os seguintes items da tabela 'usuario'('user_nome, user_login, user_cidade, user_admin' e user_id).
Só que gostaria que fosse listado apenas o user_id de quem fez login
public function getUsers()
{
$this->db->select('user_nome, user_login, user_cidade, user_admin');
$this->db->select('user_id');
$query = $this->db->get_where('usuario');
if($query->num_rows() == 0)
return 0;
else
return $query->result();
}
Campo onde faz mostrar a lista:
<a href="<?=site_url('usuario/user/edit/'.$r->user_id)?>" class="none"><img src="<?=base_url()?>assets/img/icons/page_edit.png" alt="Editar Usuário" title="Editar Usuário" width="16" height="16" /></a>Bom, você tem que passar um ID para realizar a consulta e retornar os dados referentes ao ID do usuario que você quer:
public function getUser()
{
$this->db->select('user_nome, user_login, user_cidade, user_admin');
$query = $this->db->get_where('usuario', array('id'=> $id));
if($query->num_rows() == 0)
return 0;
else
return $query->result();
}
Lembrando que alterei o nome da função para o singular (getUser) porque com essa função você retornará somente 1 resultado.
Pode atentar para a linha que chama a consulta na tabela:
$query = $this->db->get_where('usuario', array('id'=> $id));
Onde "id" é o nome de seu campo na tabela e a váriavel "$id" é o ID do usuario que estará logado.
Novamente encontramos no manual:
E qual seria o melhor modo de recuperar a id de quem esta logando?
Bem, uma das formas seria acrescentar as seguintes linhas a sua função de validação no model:
function ValidaLogin()
{
$this->db->where('user_login', $this->input->post('usuario'));
$this->db->where('user_senha', md5($this->input->post('senha')));
$query = $this->db->get('usuario');
if($query->num_rows == 1)
{
//Linhas adicinoadas iniciam aqui, recuperando os dados do banco e inserindo na session do CI
$data = array(
'id' => $row->id,
'fname' => $row->first_name,
'lname' => $row->last_name,
'username' => $row->username,
'is_logged_in' => true
);
$this->session->set_userdata($data);
//Fim das linhas adcionadas, atente para 'is_logged_in' => true que já valida o login
return true;
}
}
* Lembrando que id, first_name, last_name, username são os nomes dos campos da minha tabela de usuários no BD, configure de acordo com seu BD
Voltando ao Controller, na função index o "if" agora fica assim:
if($query) //Se o Usuário e senha existir no mesmo registro...
{
redirect('admin/painel');
}
Na sua view do admin/painel, você pode recuperar os dados do session com os seguintes códigos:
echo $this->session->userdata('userid');
echo $this->session->userdata('fname');
echo $this->session->userdata('lname');
echo $this->session->userdata('username');
Agora você tem os dados de seu usuário para recuperar onde quiser.
Espero que possa ajudar, me parece que está bastante explicado, mas segundo um amigo, eu sou meio louco e as vezes me perco em meus próprios raciocínios, então, dá uma conferida aí, aqui funcionou beleza. Qualquer coisa só perguntar.
fiz exatamente como você falo mas não aparece nada, nem erro.
quando dou
echo $this->session->userdata('userid');
nas paginas views do usuario
== Estrutura da minha tabela usuario
user_id int(11)
user_login varchar(10)
user_senha varchar(32)
user_admin tinyint(1)
user_nome varchar(100)
user_cidade varchar(50)
user_estado varchar(50)
<?php
class Login_model_user extends CI_Model{
function ValidaLoginuser()
{
$this->load->library('session');
$this->db->where('user_login', $this->input->post('usuario'));
$this->db->where('user_senha', md5($this->input->post('senha')));
$this->db->where('user_admin', 0);//aqui compara se 'user_admin igual a "0" é um usuario comun
$query = $this->db->get('usuario');
if($query->num_rows == 1) {
$data = array(
'userid' => $row->user_id,
'user_name' => $row->user_nome,
'userlogin' => $row->user_login,
'useradmin' => $row->user_admin,
'usercidade' => $row->user_cidade,
'userestado' => $row->user_estado,
'is_logged_in' => true
);
$this->session->set_userdata($data);
return true;
}
}
}
?>
class Login extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index() $this->load->model('login_model_user');//Carrega o model
$query = $this->login_model_user->ValidaLoginuser();//Chama a função da Model que checa o usuário no BD
if($query) //Se o Usuário e senha e user_admin = 0 existirem no mesmo registro...
{
redirect('usuario/painel');
}else
//-------------Adiminitrador--------------------------------------------------------------
$this->load->model('login_model_admin');//Carrega o model
$query = $this->login_model_admin->ValidaLoginadmin();//Chama a função da Model que checa o usuário no BD
if($query) //Se o Usuário e senha e user_admin = 1 existirem no mesmo registro...
{
$data = array(
'login' => $this->input->post('usuario'),
'is_logged_in' => true
);
$this->session->set_userdata($data);
redirect('admin/painel');
}else
{
$this->load->view('layouts/admin.login.php');
}
}
}Pelo que pude observar, para recuperar os dados você vai ter que logar como user e não como Admin.
Porque você adicionou as linhas de código na função que valida o Admin e não o usuário.
Aqui tem um tutorial que mostra direitinho como recuperar os dados da session, exatamente da forma como falei.
sim eu estou logando como usuário comum, mesmo assim não aparece nada.
eu separei os arquivos de usuário e administrador
tirando os arquivos que serve para os dois como o login.php o resto eu dividi em 2 para administrar melhor.
ex: na pasta models tenho:
o login_model_user que ja postei e loga como usuário e o
<?php
class Login_model_admin extends CI_Model{
function ValidaLoginadmin()
{
$this->db->where('user_login', $this->input->post('usuario'));
$this->db->where('user_senha', md5($this->input->post('senha')));
$this->db->where('user_admin', 1);//aqui compara se 'user_admin igual a "1" é um administrador
$query = $this->db->get('usuario');
if($query->num_rows == 1) //Se o Usuário e senha e user_admin = 1 existir no mesmo registro é um administrador
{
return true;
}
}
}
?>
esse é para logar como administrador
Só um detalhe: Você criou a tabela de ci_session?
CREATE TABLE `ci_sessions` (
`session_id` varchar(40) NOT NULL DEFAULT '0',
`ip_address` varchar(16) NOT NULL DEFAULT '0',
`user_agent` varchar(50) NOT NULL,
`last_activity` int(10) unsigned NOT NULL DEFAULT '0',
`user_data` text,
PRIMARY KEY (`session_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
sim no eu banco de dados eu tenho 3 tabelas
===Banco de Dados loja_virtual
== tabela 'usuario'
== tabela 'produto'
== tabela 'ci_sessions'
>
sim no eu banco de dados eu tenho 3 tabelas
===Banco de Dados loja_virtual
== tabela 'usuario'
== tabela 'produto'
== tabela 'ci_sessions'
Outra coisa. Você esqueceu de pegar os dados do banco no Login_model_user:
$query = $this->db->get('usuario');
if($query->num_rows == 1) {
$row = $query->row();// Você esqueceu esta linha
$data = array(
'userid' => $row->user_id,
'user_name' => $row->user_nome,
'userlogin' => $row->user_login,
'useradmin' => $row->user_admin,
'usercidade' => $row->user_cidade,
'userestado' => $row->user_estado,
'is_logged_in' => true
);
$this->session->set_userdata($data);
return true;
}Funciono, vlw por ter ajudado
Tranquilo, deu trabalho mas funcionou. Qualquer coisa estamos aí.
Crie mais um campo com o nome de user_nivel varchar(100)
E depois somente ir fazendo regras de if e else