ecotuba 0 Denunciar post Postado Abril 12, 2007 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
Tiago Giarreta 0 Denunciar post Postado Abril 12, 2007 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 Compartilhar este post Link para o post Compartilhar em outros sites
Skyo 1 Denunciar post Postado Abril 12, 2007 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
ecotuba 0 Denunciar post Postado Abril 12, 2007 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
Tiago Giarreta 0 Denunciar post Postado Abril 12, 2007 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
Tiago Giarreta 0 Denunciar post Postado Abril 12, 2007 Troca essa linha 23 por isso: $total = mysql_result($res); Ve se da certo, abraço! Compartilhar este post Link para o post Compartilhar em outros sites
ecotuba 0 Denunciar post Postado Abril 13, 2007 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
Skyo 1 Denunciar post Postado Abril 13, 2007 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
ecotuba 0 Denunciar post Postado Abril 13, 2007 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
Skyo 1 Denunciar post Postado Abril 13, 2007 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
ecotuba 0 Denunciar post Postado Abril 14, 2007 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
Tiago Giarreta 0 Denunciar post Postado Abril 15, 2007 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
ecotuba 0 Denunciar post Postado Abril 16, 2007 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
ScornInPC 1 Denunciar post Postado Abril 16, 2007 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