Ir para conteúdo

POWERED BY:

Arquivado

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

blacktrindade

Problema com sistema de login

Recommended Posts

Olá pessoal meu sistema de login está meio doidão, já fiz vários testes para ver se encontro o erro e não consegui.

 

segue o código da página que receba o usuário e senha para logar.

 

<?php
include_once("config/conexao.php");

if (!empty($_POST) AND (empty($_POST['usuario']) OR empty($_POST['senha']))){
	header("Location: login.php"); exit;
}

$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);
//$senha = hash('sha512', $senha);

$sql = "SELECT * FROM `usuarios` WHERE (`usuario`= '".$usuario."') AND (`senha` = '".$senha."') AND (`ativo` = 1) LIMIT 1";
$query = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($query) != 1) {
	  echo "<meta http-equiv='refresh' content='0; URL='login.php'>
			  <script type='text/javascript'>
			 	 alert('Falha no login, verifique se o usuario e senha esta correto.!')
				 location.href='login.php';
			  </script> "; exit;
} else {
	$resultado = mysql_fetch_assoc($query);
}

if (!isset($_SESSION)) session_start();

$_SESSION['id'] = $resultado['id'];
$_SESSION['nome'] = $resultado['nome'];
$_SESSION['usuario'] = $resultado['usuario'];
$_SESSION['ativo'] = $resultado['ativo'];

header("Location: index.php"); exit;
?>

 

A linha do sha512 está comentada porque eu coloquei um usuário no banco com nome e senha teste para poder ver se era o sha512 q estava causando o erro no entanto não era.

 

sempre que eu logo aparece, Falha no login, verifique se o usuário e senha esta correto!

 

e está correto o usuário e senha, ja dei um echo na sql para ver se está certa, e esta tudo saindo certinho, alguém pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não sei se pode ser isso, mas foi a única coisa que vi errado. No MySQL, a sintaxe do limit é LIMIT primeiro,quantidade.

No seu caso fica LIMIT 0,1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não sei se pode ser isso, mas foi a única coisa que vi errado. No MySQL, a sintaxe do limit é LIMIT primeiro,quantidade.

No seu caso fica LIMIT 0,1

pode ser usado sim limit 1

 

mas teoricamente não tem nescessidade desse limit 1, por que não poderia repetir login e senha.

 

e no sql faz assim que resolver

$sql = "SELECT * FROM `usuarios` WHERE `usuario`= '".$usuario."' AND `senha` = MD5('".$senha."') AND `ativo` = 1";

quando for cadastrar os usuarios so deixar no banco de dados a senha em md5. que no caso a forma mas correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode ser usado sim limit 1

 

mas teoricamente não tem nescessidade desse limit 1, por que não poderia repetir login e senha.

 

e no sql faz assim que resolver

$sql = "SELECT * FROM `usuarios` WHERE `usuario`= '".$usuario."' AND `senha` = MD5('".$senha."') AND `ativo` = 1";

quando for cadastrar os usuarios so deixar no banco de dados a senha em md5. que no caso a forma mas correta.

 

não é este o problema, não estou usando criptografia de senha no momento pois está acontecendo algum bug no código

 

o usuário cadastrado no banco de dados é teste com senha: teste e quando eu logo usando este usuário e senha eu recebo a mensagem de que a senha está incorreta e eu não consegui descobrir qual o problema :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

de um echo em

echo $sql = "SELECT * FROM `usuarios` WHERE `usuario`= '".$usuario."' AND `senha` = '".$senha."' AND `ativo` = 1";

e veja o que retorna, depois pegue o script e coloque para rodar no banco de dados, veja se retorna o registro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara o ta muito esquisito isso ai por que fiz aqui um teste com essa mesma estrutura de banco de dados

 

e passo

 

$usuario = mysql_real_escape_string('teste');
$senha   = mysql_real_escape_string('teste');
//$senha = hash('sha512', $senha);
 
$sql = "SELECT * FROM `usuarios` WHERE (`usuario`= '".$usuario."') AND (`senha` = '".$senha."') AND (`ativo` = 1) LIMIT 1";
$query = mysql_query($sql) or die(mysql_error());
 
if (mysql_num_rows($query) != 1) {
	  echo "<meta http-equiv='refresh' content='0; URL='login.php'>
			  <script type='text/javascript'>
			 	 alert('Falha no login, verifique se o usuario e senha esta correto.!')
				 location.href='login.php';
			  </script> "; exit;
} else {
	$resultado = mysql_fetch_assoc($query);
    echo $resultado['usuario'];
}
 

ele entro no else

 

 

teste desse jeito ai ver se entra no else.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O bug está aqui:

 

$sql = "SELECT * FROM `AB` WHERE (`usuario`= '".$usuario."') AND (`senha` = '".$senha."') AND (`ativo` = 1)";
$query = mysql_query($sql) or die(mysql_error());
$contador = mysql_num_rows($query);

if ($contador == 1) {
	$resultado = mysql_fetch_assoc($query);
	
} else {
	echo "PORRA";
	  echo "<meta http-equiv='refresh' content='0; URL='login.php'>
			  <script type='text/javascript'>
			 	 alert('Falha no login, verifique se o usuario e senha esta correto.!')
				 location.href='login.php';
			  </script> "; exit;
}

if (!isset($_SESSION)) session_start();

 

se eu dou um echo no contador ele retorna 1 más mesmo assim ele vai para o ELSE dessa m***a de código --' to cansado ja :/

Compartilhar este post


Link para o post
Compartilhar em outros sites

O bug está aqui:

 

$sql = "SELECT * FROM `AB` WHERE (`usuario`= '".$usuario."') AND (`senha` = '".$senha."') AND (`ativo` = 1)";
$query = mysql_query($sql) or die(mysql_error());
$contador = mysql_num_rows($query);

if ($contador == 1) {
	$resultado = mysql_fetch_assoc($query);
	
} else {
	echo "PORRA";
	  echo "<meta http-equiv='refresh' content='0; URL='login.php'>
			  <script type='text/javascript'>
			 	 alert('Falha no login, verifique se o usuario e senha esta correto.!')
				 location.href='login.php';
			  </script> "; exit;
}

if (!isset($_SESSION)) session_start();

 

se eu dou um echo no contador ele retorna 1 más mesmo assim ele vai para o ELSE dessa m***a de código --' to cansado ja :/

kkkkkkkkkkk cara sempre tem alguma coisa estranha em nosso sistema, mas isso e de mais rs

 

faz o seguinte tendo colocar assim

...
if ((int)$contador == 1){
...

//ou

...
if ((int)$contador > 0){
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo

 

acordei com paciência hoje e reescrevi o código da página de validação por etapas

 

acredite ou não da erro no login quando eu adiciono esta parte do código:

 

if (!isset($_SESSION)) session_start();

$_SESSION['id'] = $resultado['id'];
$_SESSION['nome'] = $resultado['nome'];
$_SESSION['usuario'] = $resultado['usuario'];
$_SESSION['nivel'] = $resultado['nivel'];
$_SESSION['ativo'] = $resultado['ativo'];

header("Location: index.php"); exit;

 

To abismado kkkk'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo blacktrindade

Já tive problemas com o header("Location: index.php");

 

passei a usar



print "<script> window.location='login.php';</script>";

 

e grande parte dos problemas foram solucionados

 

O real problema foi minha falta de atenção

 

quando o header redirecionava para a index eu recebia de LÁ(e não desta página de login) a mensagem de usuário e senha errados, porque la eu tenho outra valdiação de usuários que eu usava antigamente ou seja o código está correto

 

fui ver depois de ficar reparando na url, que eu só recebia a mensagem quando eu ia para a index.php

 

 

obrigado a todos os amigos que me ajudaram fico muito grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá meu amigo blacktrindad,

 

Vou postar o código que fiz e o seu para você fazer uma comparação, utilize o meio de codificação desejado, recomendo que aprenda poo. que irá ajuda-lo muito.

 

<?php
include_once("config/conexao.php");
session_strat();
if(isset($_SESSION['usuario']) AND isset($_SESSION['senha']) AND isset($_SESSION['ativo'] ) ):
$sql2 = "SELECT * FROM `usuarios` WHERE usuario = '".$_SESSION['usuario']."' AND senha = '".$_SESSION['senha']."' AND ativo = ".$_SESSION['ativo']." ";
$query2 = mysql_query($sql2) or die(mysql_error());
if(mysql_num_rows($query2) == 1):
header('Location: index.php');
else:
session_destroy();
endif;
endif;
if ( empty($_POST['usuario']) OR empty($_POST['senha']) ){
header("Location: login.php"); exit;
}
$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);
//$senha = hash('sha512', $senha);
$sql = "SELECT * FROM `usuarios` WHERE usuario = '".$usuario."' AND senha = '".$senha."' AND ativo = 1 ";
$query = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($query) == 0) {
echo "<meta http-equiv='refresh' content='0; URL='login.php'>
<script type='text/javascript'>
alert('Falha no login, verifique se o usuario e senha esta correto.!')
location.href='login.php';
</script> ";
}else{
session_start();
$resultado = mysql_fetch_assoc($query);
$_SESSION['id'] = $resultado['id'];
$_SESSION['nome'] = $resultado['nome'];
$_SESSION['usuario'] = $resultado['usuario'];
$_SESSION['senha'] = $resultado['senha'];
$_SESSION['ativo'] = $resultado['ativo'];
header("Location: index.php");
}
?>
o codigo acima foi eu que fiz rapidamente... com possibilidade de modificações para melhorias claro, porque não está tão protegido para um painel de administração, qualquer dúvida, e só falar.
Abaixo o seu
<?php
include_once("config/conexao.php");
if (!empty($_POST) AND (empty($_POST['usuario']) OR empty($_POST['senha']))){
header("Location: login.php"); exit;
}
$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);
//$senha = hash('sha512', $senha);
$sql = "SELECT * FROM `usuarios` WHERE (`usuario`= '".$usuario."') AND (`senha` = '".$senha."') AND (`ativo` = 1) LIMIT 1";
$query = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($query) != 1) {
echo "<meta http-equiv='refresh' content='0; URL='login.php'>
<script type='text/javascript'>
alert('Falha no login, verifique se o usuario e senha esta correto.!')
location.href='login.php';
</script> "; exit;
} else {
$resultado = mysql_fetch_assoc($query);
}
if (!isset($_SESSION)) session_start();
$_SESSION['id'] = $resultado['id'];
$_SESSION['nome'] = $resultado['nome'];
$_SESSION['usuario'] = $resultado['usuario'];
$_SESSION['ativo'] = $resultado['ativo'];
header("Location: index.php"); exit;
?>
Caso tenha ajudado, coloca como resolvido, caso contrário me der um retorno que estarei disponível para ajuda-lo e até deixar-mos melhor este código.
Ainda recomendo fazer uma verificação caso o usuário ou cliente clicou no link de entrar, assim melhorando o sistema de login, mas para fins didático este está ótimo, com melhorias de codificação.
ATT: João Paulo S. Supriano

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Olá meu amigo blacktrindad,

 

Vou postar o código que fiz e o seu para você fazer uma comparação, utilize o meio de codificação desejado, recomendo que aprenda poo. que irá ajuda-lo muito.

 

<?php
include_once("config/conexao.php");
session_strat();
if(isset($_SESSION['usuario']) AND isset($_SESSION['senha']) AND isset($_SESSION['ativo'] ) ):
$sql2 = "SELECT * FROM `usuarios` WHERE usuario = '".$_SESSION['usuario']."' AND senha = '".$_SESSION['senha']."' AND ativo = ".$_SESSION['ativo']." ";
$query2 = mysql_query($sql2) or die(mysql_error());
if(mysql_num_rows($query2) == 1):
header('Location: index.php');
else:
session_destroy();
endif;
endif;
if ( empty($_POST['usuario']) OR empty($_POST['senha']) ){
header("Location: login.php"); exit;
}
$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);
//$senha = hash('sha512', $senha);
$sql = "SELECT * FROM `usuarios` WHERE usuario = '".$usuario."' AND senha = '".$senha."' AND ativo = 1 ";
$query = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($query) == 0) {
echo "<meta http-equiv='refresh' content='0; URL='login.php'>
<script type='text/javascript'>
alert('Falha no login, verifique se o usuario e senha esta correto.!')
location.href='login.php';
</script> ";
}else{
session_start();
$resultado = mysql_fetch_assoc($query);
$_SESSION['id'] = $resultado['id'];
$_SESSION['nome'] = $resultado['nome'];
$_SESSION['usuario'] = $resultado['usuario'];
$_SESSION['senha'] = $resultado['senha'];
$_SESSION['ativo'] = $resultado['ativo'];
header("Location: index.php");
}
?>
o codigo acima foi eu que fiz rapidamente... com possibilidade de modificações para melhorias claro, porque não está tão protegido para um painel de administração, qualquer dúvida, e só falar.
Abaixo o seu

<?php
include_once("config/conexao.php");
if (!empty($_POST) AND (empty($_POST['usuario']) OR empty($_POST['senha']))){
header("Location: login.php"); exit;
}
$usuario = mysql_real_escape_string($_POST['usuario']);
$senha = mysql_real_escape_string($_POST['senha']);
//$senha = hash('sha512', $senha);
$sql = "SELECT * FROM `usuarios` WHERE (`usuario`= '".$usuario."') AND (`senha` = '".$senha."') AND (`ativo` = 1) LIMIT 1";
$query = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($query) != 1) {
echo "<meta http-equiv='refresh' content='0; URL='login.php'>
<script type='text/javascript'>
alert('Falha no login, verifique se o usuario e senha esta correto.!')
location.href='login.php';
</script> "; exit;
} else {
$resultado = mysql_fetch_assoc($query);
}
if (!isset($_SESSION)) session_start();
$_SESSION['id'] = $resultado['id'];
$_SESSION['nome'] = $resultado['nome'];
$_SESSION['usuario'] = $resultado['usuario'];
$_SESSION['ativo'] = $resultado['ativo'];
header("Location: index.php"); exit;
?>
Caso tenha ajudado, coloca como resolvido, caso contrário me der um retorno que estarei disponível para ajuda-lo e até deixar-mos melhor este código.
Ainda recomendo fazer uma verificação caso o usuário ou cliente clicou no link de entrar, assim melhorando o sistema de login, mas para fins didático este está ótimo, com melhorias de codificação.
ATT: João Paulo S. Supriano

 

Marcado como resolvido.

 

Como seria está verificação se o usuário clicou no link de entrar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ blacktrindade, marque resolvido no post que realmente lhe ajudou, não marque só por que pediram.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá meu amigo.

 

vou explicar:

 

você teria um form com o type submit o form para sistema de login o melhor method seria post e não get.

 

sabendo a diferença você faria.

 

 

<form action="#" method="post">

Login: <input type="text" name="login" />

Senha: <input type="password" name="senha" />

<input type="submit" name="entrar" value="Entrar no Sistema" />

</form>

 

obs # e a propria pagina, caso direcione para um arquivo não sendo a mesma pagina colocaria dentro do action e o script PHP abaixo ficaria no link do action informado. exemplo do #.

 

 

 

index.php

 

<form action="#" method="post">

Login: <input type="text" name="login" />

Senha: <input type="password" name="senha" />

<input type="submit" name="entrar" value="Entrar no Sistema" />

</form>

 

<?php

 

if(isset($_POST['entrar']) && $_POST['entrar'] == "Entrar no Sistema"):

/*

aqui o script de verificacao de login e senha, de inicio de sessão, de conexão, ficando garantido que a conexão só iria funcionar ao click do usuário, assim podendo recuperar as e variaveis necessárias a login e a senha, montando o sql de verificação etc...

pegando todo o arquivo que está dentro do if e fazendo por partes protegendo o arquivo de conexão para não ficar aberto por muito tempo.

*/

endif; // If de verificação de click do usuário...

 

?>

 

 

em arquivos separados...

 

index.php

 

 

<form action="autenticacao.php" method="post">

Login: <input type="text" name="login" />

Senha: <input type="password" name="senha" />

<input type="submit" name="entrar" value="Entrar no Sistema" />

</form>

 

 

 

autenticacao.php

 

if(isset($_POST['entrar']) && $_POST['entrar'] == "Entrar no Sistema"):

/*

aqui o script de verificacao de login e senha, de inicio de sessão, de conexão, ficando garantido que a conexão só iria funcionar ao click do usuário, assim podendo recuperar as e variaveis necessárias a login e a senha, montando o sql de verificação etc...

pegando todo o arquivo que está dentro do if e fazendo por partes protegendo o arquivo de conexão para não ficar aberto por muito tempo.

*/

endif; // If de verificação de click do usuário...

 

?>

 

 

 

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

 

 

 

Olá meu amigo erison,

 

como acima tinha escrito, caso tenha solucionado a duvida do amigo blacktrindade ele poderia colocar como resolvido podendo assim ajudar outras pessoas com a mesma dúvida. caso contrario poderia ajuda-lo ou auxilia-lo em tal erro informado.

deixei abaixo uma recomendação porque notei que o blacktrindade não tinha feito verificação de cilck do usuário então deixei abaixo a seguinte informação:

 

 

Ainda recomendo fazer uma verificação caso o usuário ou cliente clicou no link de entrar, assim melhorando o sistema de login, mas para fins didático este está ótimo, com melhorias de codificação.

 

 

então deduzo que o problema do mesmo foi resolvido pelo pequeno tutorial acima mostrado. marcado como resolvido não por que eu pedir e sim porque foi solucionado o problema.

 

 

Então pelo meu conhecimento de PHP dei uma dica para melhorar o sistema, vejo que muitos tem essa dúvida a respeito de session, logins, cookies etc...

 

para melhorar o codigo do mesmo informado resolvi dispor-me a ajuda-lo nesta pequena dica que não e só para ele e sim para muitos que acessam o forum do imasters.

 

 

Resumindo foi resolvido e não só o meu post como de vocês colega resolverão o problema do nosso amigo blacktrindade.

 

 

Até, um forte abraço e nos vemos em outros problemas relacionados ao PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso que voce fez @paulinhosupriano, faz mesma coisa que o codigo do @blacktrindade

 

so que condição deferentes

 

ex:

<?php
  
 $a = 1;

 if($a == 1):
   echo 'correto';
 else:
   echo 'errado';
 endif;

/*ou*/
 if($a > 0 and $a < 2):
   echo "correto";
 else:
   echo "errado";
 endif;

/*ou*/
 if(is_numeric($a) and $a == 1):
   echo "correto";
 else:
   echo "errado";
 endif;
?>

 

em fim existe outras varias condições que fazem a mesma coisa, só que escritas em modo diferente.

o post já foi resolvido, só que eu quero dizer que o que ajudou ele foi o post #12;

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.