Ir para conteúdo

POWERED BY:

Arquivado

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

pataxo

Login com usuario e admin

Recommended Posts

Olá gurizada...Gostaria que alquem pudece me ajudar, sou novo em php e acabei de desenvolver um sistema...

o problema que nesse sistema, o acesso dele de login esta igual pra todos, todos que entram podem fazer oque quiserem, mas eu quero restrições...

por isso admin e usuarios, e não estou conseguindo fazer isso, se alguem puder de alguma forma ajudar agradeço muito...

Obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você precisa nos dar mais informações, se está usando MySQL, cookies ou sessões... se usar MySQL basta criar um campo "nivel" ou "acesso" e setar de acordo com o usuario na base de dados, capturar isso e usar nas checagens de seu site.

 

Exemplo no MySQL você tem o campo nivel INT( 1 )

No PHP você pode fazer um switch:

switch($nivel)
{
  case 0: $titulo = "usuário"; break;
  case 1: $titulo = "administrador"; break;
  default: $titulo = "usuário";
}
Em seus scripts...

if($nivel >= 1)
{
  echo("Administradores tem acesso dentro dessa condição");
}
else
{
  echo("Desculpe, apenas administradores"); 
  die;
}
No laboratório de scripts você encontra vários exemplos, pela web também, no site do iMasters deve ter algo, qualquer dúvida só postar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

area_restrita

<?php
require_once("login.class.php");
$login = new Login();

$login->verificar("index_.php");
echo "<span style=\"font-size: 15px; color: #ffffff; font-family: Calibri;\">Bem vindo " . $LoginUsuario . "</span>";
?>

Logar.php

 

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("caf");

$LoginUsuario = $_POST["usuario"];
$SenhaUsuario = $_POST["senha"];

require_once("login.class.php");

$login = new Login();

$logar = $login->logar($LoginUsuario, $SenhaUsuario, "index_.php");

if ($logar)
echo $logar;
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por esse código não tem como te ajudar, essa classe faz o login, provavelmente você terá que fazer o que eu disse, no MySQL e depois inserir esse campo na classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

if($nivel >= 1)
{
  echo("Administradores tem acesso dentro dessa condição");
}
else
{
  echo("Desculpe, apenas administradores"); 
  die;
}

Ola Skyo,

Desculpe me meter no tópico... Mas somente para entender o codigo a cima que você postou!!

if($nivel >= 1)

{

echo("Administradores tem acesso dentro dessa condição");

Nessa parte que esta em negrito é onde vai o código para o administrador, ou seja, o layout por exemplo...

Digamos que eu quero somente mostrar para o admi os links: "TEMPO", "MEDIA". Desta forma eu posso chamar esse if e colocar dentro dessa parte os links?

 

Obrigado pela atenção e desculpe por atrapalhar!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

login.class.php

 

<?php
class Login {
// DEFININDO VARIÁVEIS
private $SenhaUsuario, $tabela, $campoLogin, $campoSenha;
public $LoginUsuario, $msgErro;

// DEFINIR AS INFORMAÇÕES DA CLASSE
function Login($tabela = "user", $campoLogin = "login", $campoSenha = "senha", $msgErro = "Login ou senha inválido") {
	$this->tabela = $tabela;
	$this->campoLogin = $campoLogin;
	$this->campoSenha = $campoSenha;
	$this->msgErro = $msgErro;
}

// FAZENDO LOGIN DO USUARIO
function logar($login,$senha,$redireciona = false) {
	// Informações do formulário
	$this->SenhaUsuario = mysql_real_escape_string(addslashes($senha));
	$this->LoginUsuario = mysql_real_escape_string(addslashes($login));

	// Verifica se o usuário existe
	$consulta = @mysql_query("SELECT ".$this->campoLogin.",".$this->campoSenha." FROM ".$this->tabela." WHERE ".$this->campoLogin." = '".$this->LoginUsuario."' LIMIT 0,1");
	$campos = @mysql_num_rows($consulta);

	// Se o usuário existir
	if($campos != 0):
		// Se a senha estiver incorreta
		if($this->SenhaUsuario != @mysql_result($consulta,0,$this->campoSenha)):
			return $this->msgErro;
		// Se a senha estiver correta
		else:
			// Coloca as informações em sessões
			session_start();
			$_SESSION['LoginUsuario'] = $login;
			$_SESSION['SenhaUsuario'] = $senha;
			// Se for necessário redirecionar
			if ($redireciona):
				header("Location: ".$redireciona."");
			endif;
		endif;
	// Se o usuário não existir
	else:
		return $this->msgErro;
	endif;
}

// VERIFICA SE O USUÁRIO ESTÁ LOGADO
function verificar($redireciona = false) {
	session_start();
	// Se estiver logado
	if(isset($_SESSION['LoginUsuario']) and isset($_SESSION['SenhaUsuario'])):
		global $LoginUsuario;
		$LoginUsuario = $_SESSION["LoginUsuario"];
		return true;
	// Se não estiver logado
	else:
		// Se for necessário redirecionar
		if ($redireciona):
			header("Location: ".$redireciona."");
		endif;
		return false;
		exit;
	endif;
}

// LOGOUT
function logout($redireciona = false) {
	session_start();
	// Limpa a Sessão
	$_SESSION = array(); 			 
	// Destroi a Sessão
	session_destroy();
	// Modifica o ID da Sessão
	session_regenerate_id();
	// Se for necessário redirecionar
	if ($redireciona):
		header("Location: ".$redireciona."");
		exit;
	endif;
}
}
?>

é isso ai meu código, ele funciona como pra todos administradores, como diferencio agora usur de admin???

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ola Skyo,

Desculpe me meter no tópico... Mas somente para entender o codigo a cima que você postou!!

if($nivel >= 1)

{

echo("Administradores tem acesso dentro dessa condição");

Nessa parte que esta em negrito é onde vai o código para o administrador, ou seja, o layout por exemplo...

Digamos que eu quero somente mostrar para o admi os links: "TEMPO", "MEDIA". Desta forma eu posso chamar esse if e colocar dentro dessa parte os links?

 

Obrigado pela atenção e desculpe por atrapalhar!!!

 

Pode.

 

Pataxo você vai ter que alterar aqui (coloquei mais ou menos como ficaria, necessita inserir no MySQL o campo):

// Verifica se o usuário existe
$consulta = @mysql_query("SELECT ".$this->campoNivel.",".$this->campoLogin.",".$this->campoSenha." FROM ".$this->tabela." WHERE ".$this->campoLogin." = '".$this->LoginUsuario."' LIMIT 0,1");
$campos = @mysql_num_rows($consulta);

// Se o usuário existir
if($campos != 0):
// Se a senha estiver incorreta
if($this->SenhaUsuario != @mysql_result($consulta,0,$this->campoSenha)):
return $this->msgErro;
// Se a senha estiver correta
else:
// Coloca as informações em sessões
session_start();
$nivel = @mysql_result($consulta,0,$this->campoSenha);
$_SESSION['LoginUsuario'] = $login;
$_SESSION['SenhaUsuario'] = $senha;
$_SESSION['NivelUsuario'] = $nivel;
// Se for necessário redirecionar
if ($redireciona):
header("Location: ".$redireciona."");
endif;
endif;
// Se o usuário não existir
else:
return $this->msgErro;
endif;
}

Você vai ter que definir o campoNivel na parte superior da classe, igual está o campoLogin em:

// DEFININDO VARIÁVEIS e // DEFINIR AS INFORMAÇÕES DA CLASSE

Assim você teria a sessão NivelUsuario e poderia trabalhar com ela fazendo as checagens no script, como postei anteriormente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ba cara muito obrigado pela ajuda, mas sou leigo mesmo, aqui deu erros...até seria melhor alguem me passar um link de algum lugar que tenha esse código pronto...mas se não souberem de algum lugar tambem valeu a ajuda ja, ja vi que neste fórum a gurizada ajuda mesmoo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente modificar o que eu falei e essa parte também, assim:

class Login {
// DEFININDO VARIÁVEIS
private $SenhaUsuario, $tabela, $campoLogin, $campoSenha; $campoNivel;
public $LoginUsuario, $msgErro;

// DEFINIR AS INFORMAÇÕES DA CLASSE
function Login($tabela = "user", $campoNivel = "nivel", $campoLogin = "login", $campoSenha = "senha", $msgErro = "Login ou senha inválido") {
$this->tabela = $tabela;
$this->campoLogin = $campoLogin;
$this->campoSenha = $campoSenha;
$this->campoNivel = $campoNivel;
$this->msgErro = $msgErro;
}
E crie um campo no seu MySQL chamado nivel.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parse error: parse error, expecting `T_FUNCTION' in C:\Arquivos de programas\EasyPHP5.3.0\www\login\login.class.php on line 4

 

 

Cara da este erro e a linha 4 seria ...

 

private $SenhaUsuario, $tabela, $campoLogin, $campoSenha; $campoNivel;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou estudando através do livro "PHP 5 - Conceitos, Programaçao e Integraçao - Walace Soares". Lá ele dá um exemplo sobre sistema com login com níveis e tudo mais. Recomendadíssimo pra quem quer aprender PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu peguei o livro na biblioteca da faculdade e to renovando o empréstimo toda semana http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Aqui você pode baixar os EXEMPLOS do livro:

http://www.editoraerica.com.br/download.asp?cod=031X

 

O livro em si nunca vi disponível para download.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parse error: parse error, expecting `T_FUNCTION' in C:\Arquivos de programas\EasyPHP5.3.0\www\login\login.class.php on line 4

 

 

Cara da este erro e a linha 4 seria ...

 

private $SenhaUsuario, $tabela, $campoLogin, $campoSenha; $campoNivel;

 

Tira o ponto e virgula de $campoSenha, poe assim:

 

private $SenhaUsuario, $tabela, $campoLogin, $campoSenha, $campoNivel;
não tinha visto quando editei

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beleza cara deu certo, eles logam normal, mas o problema ainda continua, eles continuam entrando os dois normal, como que agora eu faço as restrições dentro da pagina para usuarios?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora você deve ter a sessão NivelUsuario, faz algo como eu postei la no começo do topico, uma pagina de teste por exemplo:

<?php
session_start();
$nivel = $_SESSION['UsuarioNivel'];
switch($nivel)
{
  case 0: $titulo = "usuário"; break;
  case 1: $titulo = "administrador"; break;
  default: $titulo = "usuário";
}
if($nivel >= 1)
{
  echo("Você é um $titulo, administradores tem acesso dentro dessa condição!");
}
else
{
  echo("Desculpe, apenas administradores, você é $titulo!"); 
  die;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim cara, mas ainda continua, aparece pra min...

 

 

Notice: Undefined index: UsuarioNivel in C:\Arquivos de programas\EasyPHP5.3.0\www\login\index_.php on line 3

Desculpe, apenas administradores, você é usuário!

 

 

tanto pra admin como pra user...se puder ajudar acho que é no anco o erro antes ele rodava assim,oque devo acrescentar nele para rodar?

CREATE TABLE `user` (                                     
          `id` INT(11) NOT NULL AUTO_INCREMENT,                   
          `login` VARCHAR(28) NOT NULL,                           
          `senha` VARCHAR(50) NOT NULL,                           
          `nivel` VARCHAR(2) DEFAULT NULL,                        
          PRIMARY KEY (`id`)                                      
        ) ENGINE=MYISAM AUTO_INCREMENT=17 DEFAULT CHARSET=latin1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Preste atenção, ali em cima você cria:

$_SESSION['NivelUsuario'] = $nivel;
e depois tenta usar:

$nivel = $_SESSION['UsuarioNivel'];
percebe que são diferentes?

 

Não precisa floodar o fórum. Isso vai contra as regras. Aguarde alguma resposta.

 

 

Faça assim:

<?php
session_start();
$nivel = isset( $_SESSION['NivelUsuario'] )?$_SESSION['NivelUsuario']:0;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa então não tinha lido antes, mas muito obrigado deu certo, mas ainda tem um problema se puderes dar essa ultima ajuda, tipo...eu logo tanto com user e adm e ela encima au logar aparce mesmo pro user bemn vindo, voce é um admin, sendo que não é, e o mesmo para o user...como posso arrumar isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou o erro tá no teu banco, ou na hora em que você guarda as informações nas SESSIONs.

 

Reveja esse trecho aqui:

$nivel = @mysql_result($consulta,0,$this->campoSenha);
$_SESSION['LoginUsuario'] = $login;
$_SESSION['SenhaUsuario'] = $senha;
$_SESSION['NivelUsuario'] = $nivel;
para:

$nivel = mysql_fetch_assoc( $consulta );
$_SESSION['LoginUsuario'] = $dados['login'];
$_SESSION['SenhaUsuario'] = $dados['senha'];
$_SESSION['NivelUsuario'] = $dados['nivel'];

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.