Ir para conteúdo

POWERED BY:

Arquivado

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

mshonorato

nível de acesso em php

Recommended Posts

Boa tarde pessoal,

 

Sou iniciante em php, mas resolvi fazer um sisteminha de chamados para a empresa em que trabalho.

 

Meu problema é quanto ao nivel de acesso. Tem só 2 tipos de usuários, básico e admin.

 

Criei um campo chamado nível na tabela de usuários, onde ao cadastrar o usuário defino se ele é basico ou admin.

 

E no php tentei fazer como abaixo, mas até o admin é bloqueado.

 

bloqueio_pagina.php

 

 

<?php
include("conexao_usuarios.php");

$sql="select nivel from usuarios";
$resultado=mysql_query($sql,$conexao);

if(mysql_num_rows($resultado)!='admin')
{
echo"<script>
alert('Acesso restrito!');
history.go(-1);
</script>";
}
?>

 

Alguém poderia me dar um help?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não use mysql... use PDO, mas por enquanto está okay...

 

O problema

 

mysql_num_rows() retorna o número de colunas encontradas da tabela do banco de dados.

 

Se você quer pegar os dados do usuário, você pode usar mysql_fetch_array().

 

Seu código funcionando é isso:

<?php
include("conexao_usuarios.php");

$resultado=mysql_query("select * from usuarios",$conexao);

if(mysql_num_rows>0)
    {
    $usr_data=mysql_fetch_array($resultado);
    if($usr_data['nivel']!='admin')
     echo"<script>
     alert('Acesso restrito!');
     history.go(-1);
     </script>";
    }
?>

mysql_fetch_array()

 

mysql_fetch_array(), uma função que retorna uma array com os valores do usuário.

Se na requisição que você fez você selecionou tudo ("SELECT * FROM"), e as colunas da tabela contém: id, usrnm, pw, ele vai retornar: array("id" => [id_do_usuário],"usrnm" >= "[nome_do_usuário]", pw >= "[senha_do_usuário]");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou colega, tanto admin como basico conseguem navegar na pagina.

 

Tentei fazer com php, como mostro abaixo, mas tb não funcionou.

 

 

<?php
SESSION_CHECKER();

if ($_SESSION['nivel'] == 'admin'){
header("Location:admin.php");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

mshonorato tudo bem?

 

Aconselho a vc dar um echo "" no resultado do seu select para ver se ele esta pegando o campo que deseja.

?php
include("conexao_usuarios.php");

$sql="select nivel from usuarios";
$resultado=mysql_query($sql,$conexao);
$campo = mysql_result($resultado,0,"nivel");

echo"$campo";

if($campo !='admin')
    {
    echo"<script>
    alert('Acesso restrito!');
    history.go(-1);
    </script>";
    }
?> 

Acho que isso, qualquer duvida só pergunta! Ok

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Renato, tudo bem e vc?

 

Obrigado pela resposta!

 

Acho que estou fazendo algo errado logo no ínicio...

 

Quando o usuário faz o login, preciso pegar também o nível correto?

 

Vou fazer o teste e posto o resultado.

 

Abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

No meu banco de dados tem os campos: codigo, nome, login, senha e nivel.

 

O nível é basico ou admin.

 

Somente o admin vai ter permissão para acessar a página admin.php.

 

No hora do logon, o usuário digita login e senha, até aqui tudo bem.

 

Na pagina que veriifica o usuário, está assim:

 

 

<?php
error_reporting(false);

session_start(); /*trabalha com variavel global, se criar um x=0 vale para todo o codigo */
$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

include("conexao_usuarios.php");

$sql="select * from usuarios where login='$vlogin' and senha='$vsenha'";
$resultado=mysql_query($sql,$conexao);

if(mysql_num_rows($resultado)==0){
echo"
<script>
alert('login ou senha invalidos');
history.go(-1);
</script>
";
}
else{
$_SESSION['login']=$vlogin;
$_SESSION['senha']=$vsenha;
header("location:index.php");
}
?>

 

Agora não faço ideia de como pegar o "nível" do usuário, já que o nível não é inserido pelo usuário e sim pego direto do cadastro dele.

 

Acretido que eu tenha que pegar esse nível e deixar gravado, para depois sim dizer se o usuário pode ou não acessar determinada pagina.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi

 

Mas uma duvida que me surgiu o nível já esta gravado no banco ?? Se sim vc pode fazer desta maneira.


<?php
error_reporting(false);
 
session_start(); /*trabalha com variavel global, se criar um x=0 vale para todo o codigo */
$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

 
include("conexao_usuarios.php");
 
$sql="select * from usuarios where login='$vlogin' and senha='$vsenha'";
$resultado=mysql_query($sql,$conexao);


while ($row = mssql_fetch_array($resultado))
{
   $nivel = $row["nivel"];
   $codigo = $row["codigo"];
   $nome = $row["nome"];


 
  if( $nivel != "admin") //obs tem ta escrito como esta gravado no banco
  {
    echo"
        <script>
        alert('login ou senha invalidos');
        history.go(-1);
        </script>
    ";
  }
   else{
    $_SESSION['login']=$vlogin;
    $_SESSION['senha']=$vsenha;
    header("location:index.php");
  }

}
?>

Se ele não estiver gravado no banco, vc vai ter que fazer um formulário de cadastro de usuários e fazer a politica de separação de nível segundo a sua necessidade. Exemplo se nome for igual a fulano, nivel = admin se for igual a beltrano nivel = basico.

 



Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o nível está gravado no banco, isso é feito na hora do cadastro do usuário.

 

Vou fazer o teste com seu código e posto o resultado.

 

Abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não funcionou renato, na hora do logon a pagina fica toda em branco.

 

Mas pelo que entendi do seu código, só admin consegue logar, não é isso?

 

Me tira uma dúvida por favor.

 

Quando o usuário digita o login e senha eu pego a informação assim:

 

$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

 

Porém o nível está gravado no BD, tenho que usar o GET para pegar do BD?

$vnivel=$_GET['nivel'];

 

Pois não estou conseguindo pegar essa informação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo mshonorato neste caso somente o admin esta tento acesso a index.

Verifica se os GET estão pegando o as informações que vc precisa dando o echo nele.

 

Uma duvida a informações na index.php ?

 

Tenta passar as informações direto no select para ver se esta funcionado assim :

$sql="select * from usuarios where login='fulano' and senha='123456'"; 

o nivel vc já esta pegando ele aqui.

$nivel = $row["nivel"]; 

da um echo pra ver se ele esta pegando certinho.

echo "$nivel"; 

Não precisa pegar ele no get não.

 

Faz esses teste depois vc me fala aqui blz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funcionou assim colega:

 

 

<?php
error_reporting(false);

session_start(); /*trabalha com variavel global, se criar um x=0 vale para todo o codigo */
$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

include("conexao_usuarios.php");

$sql="select * from usuarios where login='$vlogin' and senha='$vsenha'";
// Salva os dados encontados na variável $resultado
$resultado=mysql_query($sql,$conexao);

if(mysql_num_rows($resultado)==0){
echo"
<script>
alert('login ou senha invalidos');
history.go(-1);
</script>
";
}
else{
$dados = mysql_fetch_assoc($resultado);

// Salva os dados encontrados na sessão
$_SESSION['login']=$vlogin;
$_SESSION['senha']=$vsenha;
$_SESSION['nivel']=$dados['nivel'];

// Redireciona o visitante
header("location:index.php");
}

?>

 

Agora quero bloquear o acesso a pagina admin.php para os usuários com nivel basico.

 

Tentei colocar isso na pagina admin.php, mas não rolou, a pagina fica em branco.

 

<?php
SESSION_CHECKER();

if ($_SESSION['nivel'] != 'admin'){
echo"
<script>
alert('Acesso restrito!');
history.go(-1);
</script>
";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você fez os teste que te falei ?? Qual retorno ?

if(mysql_num_rows($resultado)==0){

desse modo você não esta pegando os campos que esta buscando no banco, assim você esta somente conferindo se ele esta retornando algum objeto na consulta.

 

Para você fazer a verificação você precisa pegar os campo que esta no banco de dados:

<?php
error_reporting(false);
 
session_start(); /*trabalha com variavel global, se criar um x=0 vale para todo o codigo */
$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

 
include("conexao_usuarios.php");
 
$sql="select * from usuarios where login='$vlogin' and senha='$vsenha'";
$resultado=mysql_query($sql,$conexao);


while ($row = mysql_fetch_array($resultado))
{
   $nivel = $row["nivel"];
   $codigo = $row["codigo"];
   $nome = $row["nome"];

   
  if($nivel==""){
   
   echo"Meu select não esta me retornando nada ou usuário e senha incorretos";



}else{

   echo "$nivel";
   echo "$codigo";
   echo "nome";

}


}


 

Faz este teste e passa o feedback. blz

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Renato,

 

A saída desse código acima, entrando com usuário básico foi: basico16nome

 

Desse jeito aqui tb funcionou:

<?php
error_reporting(false);

session_start(); /*trabalha com variavel global, se criar um x=0 vale para todo o codigo */
$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

include("conexao_usuarios.php");

$sql="select * from usuarios where login='$vlogin' and senha='$vsenha'";
// Salva os dados encontados na variável $resultado
$resultado=mysql_query($sql,$conexao);

while($dados=mysql_fetch_array($resultado)){

if(mysql_num_rows($resultado)==0){
    echo"
        <script>
        alert('login ou senha invalidos');
        history.go(-1);
        </script>
    ";
}
else{	
	// Salva os dados encontrados na sessão
    $_SESSION['login']=$vlogin;
    $_SESSION['senha']=$vsenha;
    $_SESSION['nivel']=$dados['nivel'];

    // Redireciona o visitante
    header("location:index.php");
}
}
?>

Mas funcionou, vou deixar assim.

 

Meu problema agora é permissão nas paginas.

 

Tem ideia de como liberar uma determinada pagina somente para quem é "admin"?

 

Abs!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Tarde mshonorato

 

Então o código que te passei era somente para teste mesmo, que bom que ele deu esse retorno por que ela ta buscando no banco certinho ou seja "basico" por que é a classificação do usuário que vc tentou entra, "16" por que é o código dele, e "nome" por que eu esqueci de colocar o $ na frente do echo que ficaria assim echo"$nome"; e não echo"nome"; kkkkk

Mas blz bem vamos lá para sua duvida, tem como sim !!

 

Vai fica assim:

<?php
error_reporting(false);
 
session_start(); /*trabalha com variavel global, se criar um x=0 vale para todo o codigo */
$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

 
include("conexao_usuarios.php");
 
$sql="select * from usuarios where login='$vlogin' and senha='$vsenha'";
$resultado=mysql_query($sql,$conexao);


while ($row = mysql_fetch_array($resultado))
{
   $nivel = $row["nivel"];
   $codigo = $row["codigo"];
   $nome = $row["nome"];

   
  if($nivel=="basico"){
   
 echo"
<script>
alert('Você não tem permissão para acessa esta pagina ');
history.go(-1);
</script>
";



}else{

   // Salva os dados encontrados na sessão
$_SESSION['login']=$vlogin;
$_SESSION['senha']=$vsenha;
$_SESSION['nivel']=$nivel;

// Redireciona o visitante
header("location:index.php");

}


}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na pagina que verifica o login.

Ou melhor substitua esse:

<?php
error_reporting(false);

session_start(); /*trabalha com variavel global, se criar um x=0 vale para todo o codigo */
$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

include("conexao_usuarios.php");

$sql="select * from usuarios where login='$vlogin' and senha='$vsenha'";
// Salva os dados encontados na variável $resultado
$resultado=mysql_query($sql,$conexao);

while($dados=mysql_fetch_array($resultado)){

if(mysql_num_rows($resultado)==0){
    echo"
        <script>
        alert('login ou senha invalidos');
        history.go(-1);
        </script>
    ";
}
else{	
	// Salva os dados encontrados na sessão
    $_SESSION['login']=$vlogin;
    $_SESSION['senha']=$vsenha;
    $_SESSION['nivel']=$dados['nivel'];

    // Redireciona o visitante
    header("location:index.php");
}
}
?>

Por esse:

<?php
error_reporting(false);
 
session_start(); /*trabalha com variavel global, se criar um x=0 vale para todo o codigo */
$vlogin=$_POST['txtlogin'];
$vsenha=$_POST['txtsenha'];

 
include("conexao_usuarios.php");
 
$sql="select * from usuarios where login='$vlogin' and senha='$vsenha'";
$resultado=mysql_query($sql,$conexao);


while ($row = mysql_fetch_array($resultado))
{
   $nivel = $row["nivel"];
   $codigo = $row["codigo"];
   $nome = $row["nome"];

   
  if($nivel=="basico"){
   
 echo"
<script>
alert('Você não tem permissão para acessa esta pagina ');
history.go(-1);
</script>
";



}else{

   // Salva os dados encontrados na sessão
$_SESSION['login']=$vlogin;
$_SESSION['senha']=$vsenha;
$_SESSION['nivel']=$nivel;

// Redireciona o visitante
header("location:index.php");

}


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Renato,

 

Resolvi da seguinte maneira.

<?php
error_reporting(false);
require_once 'restrita.php';

$admin = 'admin';

if ($admin == $vnivel) {
	// libera dados da página admin aqui
}

else {
	// caso não seja admin acessando esta página adm emite aviso de bloq
	echo"
        <script>
        alert('Acesso restrito!');
        history.go(-1);
        </script>
    ";
	exit;
}

?>


Muito obrigado pela ajuda, agora está funcionando bem.

 

Somente quem é admin consegue acessar o menu admin.

 

Abs!

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.