Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brunojds

[Resolvido] logar com usuário via banco de dados

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie mais um campo com o nome de user_nivel varchar(100)

E depois somente ir fazendo regras de if e else

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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');	

	}

}		
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Codeigniter->User_Guide->Active rocord

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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');	

	}

}		
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

Ir para o Tutorial

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.