Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda Com Case


*Michelle*

Pergunta

Pessoal, eu sou iniciante em PHP e estou fazendo a Intranet da minha empresa.

Na página inicial tem uma tela para a pessoa colocar seu login (que será o mesmo do email da empresa) e a senha. Só que eu preciso de uma validação por níveis de acesso para que cada nível acesse páginas diferentes. Os níveis serão divididos em: 1-Diretor, 2-Gerente, 3-Coordenador, 4-Representante, 5-Administração (funcionários). Pesquisando na internet eu achei alguns códigos com CASE e tentei implementar na minha página de autenticação, mas ainda assim quando clica em Logar ele não faz a comparação com os níveis cadastrados no banco e só mostra a página "Não Encontrada".

Estou usando o phpMyAdmin pro banco e as páginas estão em .php.

Não sei se consegui explicar o que eu quero, mas peço ajuda pois preciso disso com urgência. :unsure:

O código de autenticação:

autentica.php

<?

ob_start();

//CONECTA COM O BANCO DE DADOS

$con = mysql_connect("","",""); //minha conexão conexão

mysql_select_db("bago");

//RECEBE OS DADOS DO FORMULÁRIO

$usuario = $_POST[txtUser];

$senha = $_POST[pwSenha];

//VERIFICA

$sql = mysql_query("

SELECT * FROM tb_usuarios_intranet WHERE USUARIO = '$usuario' AND SENHA = '$senha'") or die("ERRO NO COMANDO SQL");

//LINHAS AFETADAS PELA CONSULTA

$row = mysql_num_rows($sql);

//VERIFICA SE RETORNOU ALGO

if($row == 0) echo "Usuário/Senha inválidos";

else {

//PEGA OS DADOS

$id = mysql_result($sql, 0, "ID_USUARIO");

$usuario = mysql_result($sql, 0, "USUARIO");

$nome = mysql_result($sql, 0, "NOME_USUARIO");

$level_usuario = mysql_result($sql, 0, "LEVEL");

//INICIALIZA A SESSÃO

session_start();

//GRAVA AS VARIÁVEIS NA SESSÃO

$_SESSION[id] = $id;

$_SESSION[usuario] = $usuario;

$_SESSION[nome] = $nome;

$_SESSION[level_usuario] = $level_usuario;

//REDIRECIONA PARA A PÁGINA QUE VAI EXIBIR OS PRODUTOS

$level_usuario = $_GET["LEVEL"];

switch($level_usuario){

case "1":

include("restrito.php");

break;

case "2":

include("restrita2.php");

break;

case "3":

include("restrita3.php");

break;

case "4":

include("restrita4.php");

break;

default:

echo "Não encontrada.";

break;

}

}

mysql_close($con);

?>

Quem poder me ajudar, por favor poste aqui ou me mande um e-mail minsantana@gmail.com.

Me ajudem porque eu nem sei mais o que fazer pra isso dar certo :(

Editado por *Michelle*
Link para o comentário
Compartilhar em outros sites

19 respostass a esta questão

Posts Recomendados

  • 0

Sim, por exemplo, eu cadastrei no banco meu usuário com nível 5 e cadastrei outra pessoa com nível 3, para teste mesmo. Quando eu logo com meu usuário, mostra o nível de acesso 5, correto, mas a mensagem continua "Não encontrada".

Tem algo errado no código que não valida e não deixa passar pra página restrita, mas eu não consigo visualizar.

Ajuda, please! rs

Renato, eu tirei essa linha e mesmo assim não valida.

estou postando também o código da página restrita 1, só pra você ter uma idéia. Esse código eu busquei de um exemplo e também não sei se está certo totalmente.

<?

ob_start();

//INICIANDO SESSION

session_start();

$con = mysql_connect("","",""); //sua conexão

mysql_select_db("bago");

/////////////////////////////////////////

echo "$level_usuario";

$level = $level_usuario;

//relacao de levels que podem acessar a pagina

$lv = array('1','2','3','4','5');

//SE NÃO TIVER VARIÁVEIS REGISTRADAS

//RETORNA PARA A TELA DE LOGIN

if( (!isset($_SESSION[id])) AND (!isset($_SESSION[nome])) )

{

Header("Location: index.html");

};

//level permitido

if ($level_usuario == $lv[1] || $level_usuario == $lv[2] || $level_usuario == $lv[3] || $level_usuario == $lv[4] || $level_usuario == $lv[5])

{

echo "<center>";

echo "Página secreta";

echo "<br>";

echo "<br><br><a href='logout.php'>Logout</a>";

echo "</center>";

}

else

{

//DESTRÓI AS VARIÁVEIS

unset($_SESSION[id]);

unset($_SESSION[usuario]);

unset($_SESSION[nome]);

unset($_SESSION[level_usuario]);

session_destroy();

//REDIRECIONA PARA A TELA DE LOGIN

Header("Location: index.html");

}

;

mysql_close($con);

?>

Link para o comentário
Compartilhar em outros sites

  • 0

Quando o usuário for level 1 por exemplo, tem que ir para a página restrito.php né? então faça assim ...

autentica.php

<?
ob_start();
//CONECTA COM O BANCO DE DADOS
$con = mysql_connect("","",""); //minha conexão conexão
mysql_select_db("bago");

//RECEBE OS DADOS DO FORMULÁRIO
$usuario = $_POST[txtUser];
$senha = $_POST[pwSenha];

//VERIFICA
$sql = mysql_query("
SELECT * FROM tb_usuarios_intranet WHERE USUARIO = '$usuario' AND SENHA = '$senha'") or die("ERRO NO COMANDO SQL");

//LINHAS AFETADAS PELA CONSULTA
$row = mysql_num_rows($sql);

//VERIFICA SE RETORNOU ALGO
if($row == 0) echo "Usuário/Senha inválidos";

else {

//PEGA OS DADOS
$id = mysql_result($sql, 0, "ID_USUARIO");
$usuario = mysql_result($sql, 0, "USUARIO");
$nome = mysql_result($sql, 0, "NOME_USUARIO");
$level_usuario = mysql_result($sql, 0, "LEVEL");

//INICIALIZA A SESSÃO
session_start();

//GRAVA AS VARIÁVEIS NA SESSÃO
$_SESSION[id] = $id;
$_SESSION[usuario] = $usuario;
$_SESSION[nome] = $nome;
$_SESSION[level_usuario] = $level_usuario;

//REDIRECIONA PARA A PÁGINA QUE VAI EXIBIR OS PRODUTOS
$level_usuario = $_GET["LEVEL"];
switch($level_usuario){
case "1":
echo"<script language='JavaScript'>window.location.replace(\"restrito.php\");</script>";
break;
case "2":
include("restrita2.php");
break;
case "3":
include("restrita3.php");
break;
case "4":
include("restrita4.php");
break;
default:
echo "Não encontrada.";
break;
}
}

mysql_close($con);
?>

Logue com usuário level 1 e veja se dá certo. Dando certo faça o mesmo nos outros cases.

Editado por Renato Penna
Link para o comentário
Compartilhar em outros sites

  • 0
//REDIRECIONA PARA A PÁGINA QUE VAI EXIBIR OS PRODUTOS

$level_usuario = $_GET["LEVEL"];

switch($level_usuario){

case "1":

echo"&lt;script language='JavaScript'>window.location.replace(\"restrito.php\");</script>";

break;

case "2":

include("restrita2.php");

break;

case "3":

include("restrita3.php");

break;

case "4":

include("restrita4.php");

break;

default:

echo "Não encontrada.";

break;

}

}

mysql_close($con);

?>

Logue com usuário level 1 e veja se dá certo. Dando certo faça o mesmo nos outros cases.

Renato, infelizmente continua não dando certo.

Eu não sei porque mas parece que a página default está "Não Encontrada" e ele pula direto pra lá sem passar pela validação acima. Eu tentei excluir a última linha do case que está:

default:

echo "Não encontrada.";

break;

mas aí apareceu uma página em branco. Não sei mais o que faço... Isso já está torrando meus neurônios.. rs

Link para o comentário
Compartilhar em outros sites

  • 0

caracas, porque ninguém me ouve?

:angry:

$level_usuario = $_GET["LEVEL"];

aqui voce altera o valor da variável $level_usuario, depois que voce pegou o valor do level do usuário no banco.

a pergunta é

sua página faz a consulta em outra página e passa pelo método GET o level correto do usuário?

voce usou o método POST pra passar usuário e senha pra essa página.

retire essa linha acima e veja o resultado.

Link para o comentário
Compartilhar em outros sites

  • 0
caracas, porque ninguém me ouve?

:angry:

$level_usuario = $_GET["LEVEL"];

aqui voce altera o valor da variável $level_usuario, depois que voce pegou o valor do level do usuário no banco.

a pergunta é

sua página faz a consulta em outra página e passa pelo método GET o level correto do usuário?

voce usou o método POST pra passar usuário e senha pra essa página.

retire essa linha acima e veja o resultado.

Kandrade, eu vi sua mensagem sim, não fique chateado :)

Eu testei, tirei essa linha e não fez diferença.

Obrigada pela sua atenção mas confesso que nem sei mais o que fazer...

estou ficando de cabelos brancos já! rs

Editado por *Michelle*
Link para o comentário
Compartilhar em outros sites

  • 0

então faca isso:

$level_usuario = $_GET["LEVEL"];
echo "Level do usuario é: $level_usuario";
coloque o echo antes do case. testei o case aqui e a sintaxe esta correta, agora é só acertar o valor de $level_usuario. posta pra gente o resultado. e teste sem também o $level_usuario = $_GET["LEVEL"];
echo "Level do usuario é: $level_usuario";

echo uma linha antes do case

Link para o comentário
Compartilhar em outros sites

  • 0
Acho que tem outro problema kandrade. Essa página está sendo gerada á partir de outra que possui form com método get ou post ? O autentica.php possui $_POST e $_GET.

deve ser POST se não a consulta sairia errada, olha só isso:

$usuario = $_POST[txtUser];
$senha = $_POST[pwSenha];

Link para o comentário
Compartilhar em outros sites

  • 0

E como fazer para passar parâmetros pela barra de endereços pelo submit de um form com método post ? Teria como parametrizar na barra de endereços por um link, mas nesse caso não teria sido dado o post do form na página anterior. Ou o $usuario e $senha vem vazio ou então o $level_usuario. Desconheço uma forma de preencher os dois.

Michelle, o form da página que gera autentica.php possui método get ou post ?

Editado por Renato Penna
Link para o comentário
Compartilhar em outros sites

  • 0

O form da página de index é:

(...)              </object>
            <div id="full_home">
             <div style="float: left; width: 260;" align="left">
              <span class="titulo_pagina">INTRANET</span><BR>
              <span class="textotiny" style="line-height: 16px;" align="left">Acesse aqui procedimentos e informações importante para sua rotina.<BR>Acesso restrito a funcionários.</span></div>
              <div style="float: left; width: 1px; margin-right: 30px; height: 60px; background-color:#EFEFEF;"></div>
              <div style="float: left; margin-top:10px; width: 300px; height: 60px;" align="left">
               
            [color="#008000"]<form name="autentica" action="autentica.php" method="POST">
               <div class="texto" style="width: 150px; height: 15px; float: left; border: solid 0px">Log-In</div>
               <div class="texto" style="width: 80px; height: 15px; float: left; border: solid 0px">Senha</div>
               <input type="text" name="txtUser"  style="form_campo">
               <input type="password" name="pwSenha" style="form_campo">
              </div>
              <div style="float: left; width: 40px; margin-left: 3px; margin-top: 6px;" align="left">
               <INPUT TYPE="hidden" NAME="btnLogar" VALUE="ExecutaLogin">
               <BR><input type="image" src="imagens/okbutton.jpg"></form>[/color]
              </div>
             </div>
            </div>
(...)

Pelo que eu entendi do papo entre vocês, o método tá como POST não é??

Help!!!

Link para o comentário
Compartilhar em outros sites

  • 0

voce fez o "echo" como eu pedi?

<?
ob_start();
//CONECTA COM O BANCO DE DADOS
$con = mysql_connect("","",""); //minha conexão conexão
mysql_select_db("bago");

//RECEBE OS DADOS DO FORMULÁRIO
$usuario = $_POST[txtUser];
$senha = $_POST[pwSenha];

//VERIFICA
$sql = mysql_query("
SELECT * FROM tb_usuarios_intranet WHERE USUARIO = '$usuario' AND SENHA = '$senha'") or die("ERRO NO COMANDO SQL");

//LINHAS AFETADAS PELA CONSULTA
$row = mysql_num_rows($sql);

//VERIFICA SE RETORNOU ALGO
if($row == 0) echo "Usuário/Senha inválidos";

else {

//PEGA OS DADOS
$id = mysql_result($sql, 0, "ID_USUARIO");
$usuario = mysql_result($sql, 0, "USUARIO");
$nome = mysql_result($sql, 0, "NOME_USUARIO");
$level_usuario = mysql_result($sql, 0, "LEVEL");

//INICIALIZA A SESSÃO
session_start();

//GRAVA AS VARIÁVEIS NA SESSÃO
$_SESSION[id] = $id;
$_SESSION[usuario] = $usuario;
$_SESSION[nome] = $nome;
$_SESSION[level_usuario] = $level_usuario;

//REDIRECIONA PARA A PÁGINA QUE VAI EXIBIR OS PRODUTOS
switch($level_usuario){
case "1":
echo"<script language='JavaScript'>window.location.replace(\"restrito.php\");</script>";
break;
case "2":
include("restrita2.php");
break;
case "3":
include("restrita3.php");
break;
case "4":
include("restrita4.php");
break;
default:
echo "Não encontrada.";
echo "o nivel de acesso é: $level_usuario";
break;
}
}

mysql_close($con);
?>

pra ele não entrar no case correto a variavel está com um valor diferente do previsto pelo script.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...