Ir para conteúdo

Arquivado

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

ecotuba

com login

Recommended Posts

Amigos

Peguei vários sistemas de login pata estudar e tentei fazer um, mas ele está dando erro que não sei interpretar.

Se puderem me ajudar, estou postando os codigos abaixo.

Grato

 

conecta.inc

anti_injection

login.php

checa_login

 

*--------------------------------*

conecta.inc

<?php// Conecta-se com o MySQLmysql_connect("localhost", "root", "ecotuba");// Seleciona banco de dadosmysql_select_db("test");?>
*--------------------------------*

anti_injection.inc

<?php   function anti_injection($sql)   {   // remove palavras que contenham sintaxe sql  $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);   $sql = trim($sql);//limpa espaços vazio   $sql = strip_tags($sql);//tira tags html e php   $sql = addslashes($sql);//Adiciona barras invertidas a uma string   return $sql;  }  ?>

*--------------------------------*

login.php

 

<htm><head></head>	<!--Não vou postar o css p economizar linhas OK--><body><div id="FormBox">          <form id="contato"  form action="checa_login.php" method="post">	      	  <label for="login">Nome de Usuário</label>	  <input type="text" name="login" id="login" size="40" /><br />	    	   	  <label for="senha"> Senha </label>	  <input type="password" name="senha" id="senha" size="40"/>	  	  <div id="boxBtn">  	  <label for="entrar">Clique para entrar</label>	  <input name="cadastrar" type="submit" class="botao" id="cadastrar" value="Entrar" />	  </div>	  </form>                       </div> 	  </body>	  </html>

*--------------------------------*

checa_login


$senha = $_POST['senha'];

}

 

//busca no banco de dados

$res = mysql_query("SELECT COUNT (*) AS total FROM usuarios WHERE login = '$login' AND senha = md5('$senha')");

$total = mysql_result($res, 0, "total")or die ("Erro na consulta.");

mysql_close();

if($total != 1){

 

// redireciono para pagina de login

header("Location linenums:0'><?php // Inicia a sessão session_start(); include ("../conecta.inc"); include ("../anti_injection.inc"); //Trata as variáveis do formulário e insere uma função para checar injeção de codigos sql $login = anti_injection($_POST["login"]); $senha = anti_injection($_POST["senha"]); // Validação das variaveis vindas do formulário if(!(empty($login) AND empty($senha))) { echo "Usuário ou senha inválidos"; } else{ $login = $_POST['login']; $senha = $_POST['senha']; } //busca no banco de dados $res = mysql_query("SELECT COUNT (*) AS total FROM usuarios WHERE login = '$login' AND senha = md5('$senha')"); $total = mysql_result($res, 0, "total")or die ("Erro na consulta."); mysql_close(); if($total != 1){ // redireciono para pagina de login header("Location: login.html"); exit; } else { //Pega os dados $total = mysql_result($res, 0, "total"); //crio a sessão - usuário existe -> registra as informações na sessão $_SESSION[login] = $login; $_SESSION[senha] = $senha; // redireciono para pagina principal header("Location: principal.html"); }//Fecha else ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
if(!(empty($login) AND empty($senha))) {	     echo "Usuário ou senha inválidos";   }	else {	  $login = $_POST['login'];	  $senha = $_POST['senha'];	}
Não entendi o else, as variaveis já foram setadas no inicio, e depois desse echo "Usuário ou senha inválidos", insira um die para parar a checagem, não é essa a intensão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fica mais fácil se você puder postar o erro que esta dando, ou o que esta acontecendo.

 

Vlw http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Oi Tiago. esqueci do erro, foi mal, olha ele ai:

 

Usuário ou senha inválidos (esse eu nao entendi)

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in D:\www\Instituto\login\adm_user\checa_login.php on line 23

Erro na consulta.

 

A linha 23 é essa aqui:

$total = mysql_result($res, 0, "total")or die ("Erro na consulta.");

 

Valeu

 

if(!(empty($login) AND empty($senha))) {	     echo "Usuário ou senha inválidos";   }	else {	  $login = $_POST['login'];	  $senha = $_POST['senha'];	}
Não entendi o else, as variaveis já foram setadas no inicio, e depois desse echo "Usuário ou senha inválidos", insira um die para parar a checagem, não é essa a intensão?
Olá

Como eu falei, eu estou estudando e peguei codigos prontos, mas entendi a logica do que você disse.

Tipo se eu deletar o else e colcar um exit; resolve?

 

Vou testar de novo mais tarde, valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro troca isso:

if(!(empty($login) AND empty($senha))) {	     echo "Usuário ou senha inválidos";   }	else {	  $login = $_POST['login'];	  $senha = $_POST['senha'];	}

Por isso:

if ( $login != "" and $senha != "") {	$login = $_POST['login'];	$senha = $_POST['senha'];} else {	echo "Usuário ou senha inválidos";}

Testa e vê se para de informar usuario ou senha invalidos.

Me avisa!

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Skyo, Tiago e demais.

Acertei (pelo menos parece) avalidação, agora o pau ta na sql, vejam q rola agora:

 

 

Warning: Wrong parameter count for mysql_result() in D:\www\Instituto\login\adm_user\checa_login.php on line 22

Usuário/Senha inválidos

Warning: Cannot modify header information - headers already sent by (output started at D:\www\Instituto\login\anti_injection.inc:1) in D:\www\Instituto\login\adm_user\checa_login.php on line 28

 

vejam o trecho de codigo

 


$total = mysql_result($res);

 

mysql_close();

if($total != 1){

echo "Usuário/Senha inválidos";

// redireciono para pagina de login

header("Location _linenums:0'>//busca no banco de dados $res = mysql_query("SELECT COUNT (*) AS total FROM usuarios WHERE login = '$login' AND senha = md5('$senha')"); <strong class='bbc'>$total = mysql_result($res);</strong> mysql_close(); if($total != 1){ echo "Usuário/Senha inválidos"; // redireciono para pagina de login <strong class='bbc'>header("Location: login.html");</strong> }

Que vcs acham q é agora?

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ve se assim funciona...

session_start();	include ("../conecta.inc");	include ("../anti_injection.inc");$login = anti_injection($_POST["login"]);	$senha = anti_injection($_POST["senha"]);if(empty($senha) or empty($login)) {  echo ("<script>alert('Login ou senha inválidos!');window.history.go(-1);</script>");   die; }$res = mysql_query("SELECT * FROM usuarios WHERE login='$login' AND senha=md5('$senha')");$total = mysql_num_rows($res);if($total != 1){  echo ("<script>alert('Login ou senha inválidos!');window.history.go(-1);</script>");   die;}else{  $login = mysql_result($res, 0, "login");	   $senha = mysql_result($res, 0, "senha");   $_SESSION[login] = $login;  $_SESSION[senha] = $senha; 	  header("Location: principal.html");}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Skyo e Cia, tbm nao deu certo, veja so o q da errado.

Ele aponta o erro de validação abaixo, ai troquei a forma de validar, passou na 1ª, mas ficou na consulta sql.

 

"<script>alert('Login ou senha inválidos!');window.history.go(-1);</script>"

 

Consegui resolver do jeito la abaixo, mas ainda assim tem coisa estranha, tentei colocar uma include chamando a function anti_injection, ai da esse erro:

 

Parse error: parse error, unexpected T_VARIABLE in D:\www\Instituto\login\adm_user\login_OK.php on line 10

 

Da forma q citei com a include a linha 10 é essa:

$login = anti_injection($_POST["login"]);

 

Com esse codigo aqui rolou o login.


$senha = $_POST['senha'];

} else {

echo"Usuário ou senha incorretos. <a href=\"java script linenums:0'><?php // Inicia a sessão session_start(); include ("../conecta.inc"); function anti_injection($sql) { // remove palavras que contenham sintaxe sql $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql); $sql = trim($sql);//limpa espaços vazio $sql = strip_tags($sql);//tira tags html e php $sql = addslashes($sql);//Adiciona barras invertidas a uma string return $sql; } //Trata as variáveis do formulário e insere uma função para checar injeção de codigos sql $login = anti_injection($_POST["login"]); $senha = anti_injection($_POST["senha"]); // Validação das variaveis vindas do formulário if ( $login != "" and $senha != "") { $login = $_POST['login']; $senha = $_POST['senha']; } else { echo"Usuário ou senha incorretos. <a href=\"java script:history.go(-1)\">Volte</a> e tente novamente."; die; } //busca no banco de dados $res = ("select * from usuarios where login = '".$login."' and senha = md5('$senha')"); $Acao = mysql_query($res); // recebe a linha que foi alterada no sql retornando o valor $Resultados = mysql_num_rows($Acao); if($Resultados == 0){ echo "Usuário ou senha incorretos. <a href=\"java script:history.go(-1)\">Volte</a> e tente novamente."; die; } else { //Pega os dados $linha = mysql_fetch_array($Acao); $id = $linha['id']; $nome = $linha['nome']; //crio a sessão - usuário existe -> registra as informações na sessão $_SESSION['login'] = $login; $_SESSION['senha'] = $senha; header("location: principal.php"); } //Fecha ELSE ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, desculpe, editei meu código acima, agora parece estar certo...antes estava if($linhas != 1) por isso dava o erro, agora mudei para if($total != 1), falha minha, força do habito utilizar a variavel $linhas... tente agora...Caso não consiga envie-me uma mensagem privada e converçamos no MSN ou algo assim sobre isso, porque o código que enviei deve funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Skyo

 

Acertei o login, mas ta rolando uma coisa muito estranha:

 

Qdo chama a função [red]anti_injection[/red] por uma include da o erro abaixo, qdo coloco ela no corpo da página, roda na boa, veja o codigo inicial:

 

include "..\anti_injection"; (esta é a linha 5)

 

*--------------------------------------------------------------------------------------*

Warning _linenums:0'><?php // Inicia a sessão session_start(); include "..\conecta.inc"; include "..\anti_injection"; (esta é a linha 5)*--------------------------------------------------------------------------------------*Warning: include(..\anti_injection) [function.include]: failed to open stream: No such file or directory in D:\www\Instituto\login\adm_user\login_OK.php on line 5Warning: include() [function.include]: Failed opening '..\anti_injection' for inclusion (include_path='.;C:\php5\pear') in D:\www\Instituto\login\adm_user\login_OK.php on line 5Fatal error: Call to undefined function anti_injection() in D:\www\Instituto\login\adm_user\login_OK.php on line 19line 19 = $login = anti_injection($_POST["login"]);*---------------------------------------------------------------------------------------------*

Que pode ser isso?

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falae ecotuba,

acho q você esqueceu de colocar a extensão do arquivo:

include "..\anti_injection";

Pelo erro que esta dando ele não esta encontrando o arquivo no diretorio.

 

Ve se era isso, abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve Tiago

Pode crer, havia esquecido, acertei lá e olha q rolou:

 

Warning: Cannot modify header information - headers already sent by (output started at D:\www\Instituto\login\anti_injection.inc:1) in D:\www\Instituto\login\adm_user\login_OK.php on line 51

 

Onde minha linha 51 é a seguinte em vermelho :

 

//crio a sessão - usuário existe -> registra as informações na sessão	$_SESSION['login'] = $login;	$_SESSION['senha'] = $senha;	header ("location: principal.php");	} //Fecha ELSE

Sem a include ele funciona na boa, mas não queria usar dessa forma, com a função no corpo do arquivo, que você acha q pode ser isso?

Só falta isso p acabar o loginm eu espero rsrs

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

provavelmente acima dessa linha "header", deve ta "pintando" alguma coisa na telao header só funciona se nada for mostrado antes, à grosso modo ^^da uma olhada se antes tem alguma coisa, e comenta pra ver se roda

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.