Ir para conteúdo

POWERED BY:

Arquivado

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

churrumino

[Resolvido] Problema com autenticação (login)

Recommended Posts

Olá, pessoal.

 

A situação é a seguinte, sou leigo em PHP, herdei aqui na empresa o site da empresa e um sisteminha que é como uma extranet da moça que trabalhava aqui no setor e saiu, isso já faz cerca de um ano.

 

Com o site da empresa eu consigo me virar legal, a Extranet sempre funcionou sem problemas até hoje, mas acabo de me deparar com um problema que não sei como resolver com relação à Extranet...

 

Ao entrar no endereço, é apresentado ao usuário uma tela de login, pedindo usuário e senha e um botão Entrar.

 

Ao preencher os dados e clicar em entrar, eu, ou qualquer outro usuário que testei, sou jogado de volta para a mesma tela de login. Se coloco os dados errados (como o meu usuário e a senha errada) ele apresenta a mensagem de "Usuário ou senha inválidos!" como deveria.

 

Eis o código referente a essa página..

 

<form method="post" action="../acoes/autentica.php">
	<p>Nome de Usuário:<br>
   			<input type="text" name="login" id="login">
			<br>
			<span class="mensagens">
				<?php
					if (isset($_REQUEST['slog'])){
						echo("Digite seu nome de usuário <br>");
						echo("<script type=\"text/javascript\">document.getElementById(\"login\").focus();</script><br>"); 
					}
				?>
			</span>
			<br>
			Senha:<br> 
			<input type="password" name="senha" id="senha">
			<br>
			<span class="mensagens">
				<?php
					if (isset($_REQUEST['ssen'])){
						echo("Digite sua senha <br>");
						echo("<script type=\"text/javascript\">document.getElementById(\"login\").value = \"".$_REQUEST['ssen']."\"\n");
						echo("document.getElementById(\"senha\").focus();</script><br>"); 
					}
				?>
			</span>
			<br>
			<input type="submit" value="Entrar">
			<span class="mensagens">
				<?php
					if (isset($_REQUEST['fusu'])){
						echo("<br>Usuário ou senha inválidos!");
						echo("<script type=\"text/javascript\">document.getElementById(\"login\").value = \"".$_REQUEST['fusu']."\"\n");
						echo("document.getElementById(\"senha\").focus();</script>"); 
					}
				?>
			</span>

 

E eis o que consta no arquivo /acoes/autentica.php..

 

<?php

require("../uteis/conexao.php");

if((isset($_POST['login']) == false) || (trim($_POST['login']) == "")){
	header("Location: ../paginas/login.php?slog=x");
	exit;
}
if((isset($_POST['senha']) == false) || (trim($_POST['senha']) == "")){
	header("Location: ../paginas/login.php?ssen=".$_POST['login']);
	exit;
}

$login = strtolower($_POST['login']);
$senha = sha1($_POST['senha']);

$sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'");

if(!pg_num_rows($sql)){
	header("Location: ../paginas/login.php?fusu=".$_POST['login']);
	exit;
}

$dados = pg_fetch_assoc($sql);

session_start();
$_SESSION['login'] = $dados['login'];
$_SESSION['nome'] = $dados['nome'];
$_SESSION['tipo'] = $dados['tipo'];
$_SESSION['id'] = $dados['id'];
$_SESSION['email'] = $dados['email'];
$_SESSION['logado'] = "parangaricutirimirruaro";

if($_SESSION['tipo'] == 'admin'){
	header("Location: ../paginas/index_admin.php");
}else{
	header("Location: ../paginas/index_geral.php");
}
exit;

?>

 

O banco de dados é PostgreSQL, aparentemente está funcionando corretamente pois há outras aplicações e inclusive o site que funcionam com esse mesmo banco.

 

Tudo isso é hospedado internamente aqui na empresa.

 

Alguém teria alguma ideia para me dar uma luz? Caso necessite de mais alguma informação pra auxiliar, é só pedir.

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 07/11/2011 at 16:32, Igor.php disse:

você expos o codigo, mas nao expos o problema, o q esta acontecendo?

 

Oi, Igor! Em primeiro lugar, obrigado por responder! :)

 

O que acontece é o seguinte..

 

Eu (ou qualquer outro usuário), preencho os campos de Nome de usuário e Senha, porém ao clicar em Entrar, ao invés de ser redirecionado para a página que geralmente era redirecionado que seria index_admin.php (quando o usuário é "administrador") ou index_geral.php (se for um usuário "normal"), o usuário simplesmente volta pra essa tela de login, com os campos em branco. Como se nada tivesse acontecido..

 

Consegui me explicar?

 

É estranho, pois estava funcionando normalmente semana passada, que foi a última vez que testei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

churrumino,

Ele não encontra o usuário e senha no banco. por isso ele redireciona neste trecho:

$sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'");               
if(!pg_num_rows($sql)){                
header("Location: ../paginas/login.php?fusu=".$_POST['login']);           
    exit;     
  }

 

mande ele escrever comando em $sql e retire o redirecionamento da página para verificar se a busca está correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 07/11/2011 at 16:47, Leandro Chaves disse:

churrumino,

Ele não encontra o usuário e senha no banco. por isso ele redireciona neste trecho:

$sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'");               
if(!pg_num_rows($sql)){                
header("Location: ../paginas/login.php?fusu=".$_POST['login']);           
    exit;     
  }

 

mande ele escrever comando em $sql e retire o redirecionamento da página para verificar se a busca está correta.

 

Oi, Leandro! Valeu a dica.

 

Como eu posso fazer então?

 

$sql = pg_query("select * from usuarios where login = 'joazinho' and senha = '123456'")
exit;

 

Assim? Eu sou leigo pra caramba com esse tipo de coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

neste trecho

$sql = pg_query("select * from usuarios where login = 'joazinho' and senha = '123456'")
exit;

da um

echo "select * from usuarios where login = '$login' and senha = '$senha'"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então.. Coloquei o código assim no autentica.php:

 

<?php

require("../uteis/conexao.php");

if((isset($_POST['login']) == false) || (trim($_POST['login']) == "")){
	header("Location: ../paginas/login.php?slog=x");
	exit;
}
if((isset($_POST['senha']) == false) || (trim($_POST['senha']) == "")){
	header("Location: ../paginas/login.php?ssen=".$_POST['login']);
	exit;
}

$login = strtolower($_POST['login']);
$senha = sha1($_POST['senha']);

// $sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'");
echo "select * from usuarios where login = '$login' and senha = '$senha'";

if(!pg_num_rows($sql)){
	header("Location: ../paginas/login.php?fusu=".$_POST['login']);
	exit;
}

$dados = pg_fetch_assoc($sql);

session_start();
$_SESSION['login'] = $dados['login'];
$_SESSION['nome'] = $dados['nome'];
$_SESSION['tipo'] = $dados['tipo'];
$_SESSION['id'] = $dados['id'];
$_SESSION['email'] = $dados['email'];
$_SESSION['logado'] = "parangaricutirimirruaro";

if($_SESSION['tipo'] == 'admin'){
	header("Location: ../paginas/index_admin.php");
}else{
	header("Location: ../paginas/index_geral.php");
}
exit;

?>

 

Fiz a troca ali como vocês sugeriram, subi o arquivo no meu ftp. O resultado foi, ao entrar com o Usuário e Senha e pressionar Enter ou clicar no botão Entrar, ele exibe a mensagem de Usuário ou Senha inválidos!

 

Alguma outra sugestão?

 

Ah, obrigado por responder, pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O resultado foi o seguinte..

 

select * from usuarios where login = 'cristofer' and senha = 'minhasenhacriptografada'

 

No caso, "cristofer" sou eu, e minha senha eu apaguei, mas era ela criptografada, e bate com a que está no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Troque o trecho que executa a query por:

pg_query("select * from usuarios where login = '$login' and senha = '$senha'") or die(pg_last_error());

 

E adicione uma linha aqui no final:

  session_start();
       $_SESSION['login'] = $dados['login'];
       $_SESSION['nome'] = $dados['nome'];
       $_SESSION['tipo'] = $dados['tipo'];
       $_SESSION['id'] = $dados['id'];
       $_SESSION['email'] = $dados['email'];
       $_SESSION['logado'] = "parangaricutirimirruaro";

session_commit();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente só tenho acesso aos arquivos e servidores lá do trabalho.

 

Amanhã pela manhã bem cedo testarei e postarei resultados.

 

Mais uma vez obrigado pelas respostas, pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se a sugestão do Henrique não funcionar. Coloca um print_r, pra escrever os valores retornados do banco:

 

  session_start();
print_r($dados);
       $_SESSION['login'] = $dados['login'];
       $_SESSION['nome'] = $dados['nome'];
       $_SESSION['tipo'] = $dados['tipo'];
       $_SESSION['id'] = $dados['id'];
       $_SESSION['email'] = $dados['email'];
       $_SESSION['logado'] = "parangaricutirimirruaro";

session_commit();

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, pessoal..

 

  Em 07/11/2011 at 20:55, Henrique Barcelos disse:

Troque o trecho que executa a query por:

pg_query("select * from usuarios where login = '$login' and senha = '$senha'") or die(pg_last_error());

 

E adicione uma linha aqui no final:

  session_start();
       $_SESSION['login'] = $dados['login'];
       $_SESSION['nome'] = $dados['nome'];
       $_SESSION['tipo'] = $dados['tipo'];
       $_SESSION['id'] = $dados['id'];
       $_SESSION['email'] = $dados['email'];
       $_SESSION['logado'] = "parangaricutirimirruaro";

session_commit();

 

Com essas mudanças sugeridas pelo Henrique, ao entrar com o usuário e senha e clicar em entrar eu sou redirecionado pro endereço ../acoes/autentica.php e a tela do meu navegador fica completamente branca.

 

  Em 08/11/2011 at 00:06, Leandro Chaves disse:

Se a sugestão do Henrique não funcionar. Coloca um print_r, pra escrever os valores retornados do banco:

 

  session_start();
print_r($dados);
       $_SESSION['login'] = $dados['login'];
       $_SESSION['nome'] = $dados['nome'];
       $_SESSION['tipo'] = $dados['tipo'];
       $_SESSION['id'] = $dados['id'];
       $_SESSION['email'] = $dados['email'];
       $_SESSION['logado'] = "parangaricutirimirruaro";

session_commit();

 

O mesmo ocorre com a mudanças sugerida pelo Leandro, redirecionado pra ../acoes/autentica.php e a tela do navegador branca.

 

Alguma outra ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, Leandro!

 

  Em 08/11/2011 at 10:16, Leandro Chaves disse:

Cara,

Tente ativar a opção display_erros, parece que não está ativa. Coloque esse trecho no começo do arquivo:

ini_set('display_errors','On'); 

 

Fiz a mudança que você sugeriu. O erro que mostrou foi o seguinte:

 

Warning: pg_num_rows() expects parameter 1 to be resource, null given in /var/www/html/site/extranet/acoes/autentica.php on line 23

 

No caso, está se referindo a esse trecho do código:

 

	if(!pg_num_rows($sql)){
	// header("Location: ../paginas/login.php?fusu=".$_POST['login']);
	exit;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece que o select não está retornando nada. Tente trocar:

$sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'"); 

 

por:

$sql = pg_query("select * from usuarios"); 

 

 

E veja se retorna alguma coisa. Se não retornar, o erro esta na conexão com o banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  Em 08/11/2011 at 10:57, Leandro Chaves disse:

Parece que o select não está retornando nada. Tente trocar:

$sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'"); 

 

por:

$sql = pg_query("select * from usuarios"); 

 

 

E veja se retorna alguma coisa. Se não retornar, o erro esta na conexão com o banco.

 

Realizando essa mudança voltei à situação inicial.. Preenchendo os campos usuário e senha, ao clicar em Entrar ou pressionar enter, sou redirecionado de volta para a mesma tela de login e senha. :(

 

Meu arquivo de conexão com o banco está assim..

 

<?php

$conect = pg_connect("host=localhost dbname=extranet user=nomedeusuario password=senha");
if (!$conect){
	echo 'Erro ao conectar o banco!';
	exit;
}

?>

 

Creio que os campos user e password estejam corretos pois, tenho configurado com os mesmos dados no SQL Manager e consigo conectar sem problemas.

 

Mais alguma chance pra mim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente, o select não está retornando resultado. Por isso você redirecionado para a página de login.

Comente todas as linha com o comando header, coloque o print_r que te passei anteriormente, e acrescente echo 'alguma coisa' dentro de cada if pra vocẽ saber onde exatamente o script está parando.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito bem, o código ficou assim..

 

<?php

ini_set('display_errors','On'); 

require("../uteis/conexao.php");

if((isset($_POST['login']) == false) || (trim($_POST['login']) == "")){
	// header("Location: ../paginas/login.php?slog=x");
	echo "primeiro if";
	exit;
}
if((isset($_POST['senha']) == false) || (trim($_POST['senha']) == "")){
	// header("Location: ../paginas/login.php?ssen=".$_POST['login']);
	echo "segundo if";
	exit;
}

$login = strtolower($_POST['login']);
$senha = sha1($_POST['senha']);

// $sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'");
// echo "select * from usuarios where login = '$login' and senha = '$senha'";
// pg_query("select * from usuarios where login = '$login' and senha = '$senha'") or die(pg_last_error());
$sql = pg_query("select * from usuarios");  

if(!pg_num_rows($sql)){
	// header("Location: ../paginas/login.php?fusu=".$_POST['login']);
	echo "terceiro if";
	exit;
}

$dados = pg_fetch_assoc($sql);

session_start();
print_r($dados);
$_SESSION['login'] = $dados['login'];
$_SESSION['nome'] = $dados['nome'];
$_SESSION['tipo'] = $dados['tipo'];
$_SESSION['id'] = $dados['id'];
$_SESSION['email'] = $dados['email'];
$_SESSION['logado'] = "parangaricutirimirruaro";

session_commit();

if($_SESSION['tipo'] == 'admin'){
	// header("Location: ../paginas/index_admin.php");
	echo "quarto if";
}else{
	// header("Location: ../paginas/index_geral.php");
	echo "quinto if";
}
exit;

?>

 

Eu tentei o login com o meu usuario ("cristofer") e o erro apresentado no navegador foi o seguinte:

 

Array ( [id] => 8 [login] => LOGIN_DE_UM_USUARIO [nome] => NOME_DE_UM_USUARIO [senha] => senha_criptografada [tipo] => fornecedor [email] => email_do_usuario@email.com.br ) quinto if

 

O que eu reparei, é que se eu for olhar lá no banco na minha tabela de usuários, esse é o primeiro usuário na ordem que não é admin. Não sei se posso, vou postar uma screenshot do banco, caso eu deva retirar, algum admin por favor me avise.

 

G8Eqo.jpg

 

Só pra complementar..

 

Se eu voltar pra minha query antiga, ou seja, essa, que pega só meu usuário mesmo:

 

$sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'");

 

A mensagem que o navegador exibe é a seguinte:

 

Array ( [id] => 23 [login] => cristofer [nome] => Cristofer [senha] => minha_senha_criptografada [tipo] => admin [email] => meu_email@email.com.br ) quarto if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, deu para ver que a conexão está funcionado.

Vamos testar aos poucos. Primeiro, altera a linha da busca para:

$sql = pg_query("select * from usuarios where login = '$login' and senha = '$senha'") or die(pg_last_error()); 

 

 

E veja se vai ser escrito os dados do usuário correto.

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.