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

(Resolvido) Validação de login e senha!


Gustavo_Sid

Pergunta

Olá galera.

Estou querendo fazer uma validação em ajax e PHP mais sou novo na área estou com um pouco de dificuldade.

Fiz o script so que está com algum prblema na parte do java script.

Quando passo os dados por metodo GET direto pela barra de endereço, o PHP retorna certo, mais o javascript não está dando certo.

O codigo está ae quem puder me ajudar ficarei grato.

Obrigado..

------>Script AJAx

<script type="text/javascript">

var xmlhttp;

function GetXmlHttpObject()
{
if (window.XMLHttpRequest)
  {
  // code for IE7+, Firefox, Chrome, Opera, Safari
  return new XMLHttpRequest();
  }
if (window.ActiveXObject)
  {
  // code for IE6, IE5
  return new ActiveXObject("Microsoft.XMLHTTP");
  }
return null;
}

function validaLogin(login,senha){
   var result;
   
   xmlhttp=GetXmlHttpObject();
    if (xmlhttp==null)
      {
          alert ("Navegador não aceita AJAX");
          return;
      }
    var url="http://localhost/meusite/valida_login.php";
    url=url+"?login="+login+"&senha="+senha;
    url=url+"&sid="+Math.random();
    xmlhttp.onreadystatechange=function()
    {
        //alert(xmlhttp.readyState);     ----->>> QUANDO não COMENTADO FUNCIONA
        if (xmlhttp.readyState==4)
          {
            result = unescape(xmlhttp.responseText);
              if (result=='0'){
                  document.getElementById("veriflog").innerHTML="Usuario ou senha incorretos";
              }            
          }
    }

    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
    
    if (result=='0')
       return false;
    
}

</script>
--------->>CODIGO PHP
<?php

   include("include.php");
   
   $login=$_REQUEST[login];
   $senha=$_REQUEST[senha];
   
   
   $sql= "SELECT * FROM usuarios WHERE login = \"$login\"";
   $result = mysql_query($sql);

   if (($linha = mysql_fetch_array($result)) && ($linha[senha]==$senha))
      echo 1;
   else
      echo 0;

?>
---------->> FORMULARIO
<body background="fundo.jpg">
<form id="form1" name="form1" method="post" action="">
  <table width="784" border="0">
    <tr>
      <td width="49" height="39">Login:</td>
      <td colspan="2"><input name="login" type="text" id="login" size="30" /></td>
    </tr>
    <tr>
      <td height="37">Senha:</td>
      <td colspan="2"><input type="password" name="senha" id="senha" /></td>
    </tr>
    <tr>
      <td height="30" colspan="5"><table width="260" border="0">
        <tr>
          <td width="237" height="30" align="center"><spam id="veriflog"></spam></td>
        </tr>
      </table></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td height="44" colspan="4" align="center"><input type="submit" name="submit" id="submit" value="Logar" onclick="return validaLogin(login.value,senha.value)" /></td>
    </tr>
  </table>
</form>
</body>

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Gustavo, tudo bom?

Cara, o problema está na forma como está tentando retornar o valor, eu acho.

Tire essa esse trecho no final da função:

if (result=='0')
       return false;
E adicione um else para quando o resultado dá diferente de um. Ponha um alert e veja o que acontece:
function validaLogin(login,senha){
   var result;
   
   xmlhttp=GetXmlHttpObject();
    if (xmlhttp==null)
      {
          alert ("Navegador não aceita AJAX");
          return;
      }
    var url="http://localhost/meusite/valida_login.php";
    url=url+"?login="+login+"&senha="+senha;
    url=url+"&sid="+Math.random();
    xmlhttp.onreadystatechange=function()
    {
        
        if (xmlhttp.readyState==4)
          {
            result = unescape(xmlhttp.responseText);
              if (result=='0'){
                  document.getElementById("veriflog").innerHTML="Usuario ou senha incorretos";
              }
              else{
                  alert(result)
              }            
          }
    }

    xmlhttp.open("GET",url,true);
    xmlhttp.send(null);
    
}

Link para o comentário
Compartilhar em outros sites

  • 0

Tudo tranquilo KaKarotto..

Tentei fazer isso já, mas acontece que não está retornando nada, o "result" fica vazio.

Tentei colocar esse codigo java script em um arquivo separado com extenção ".js"e e passar os paramentros da função de validação direto com um Html que so chama a função pra ver se era na pagina o erro, mas acontece a mesma coisa, o responseText do xmlhttp sempre vem em branco, a não ser quando deixo aquele "alert" que tem em cima do "xmlhttp.readyState==4" habilitado aí funciona.

Não faço a minima idéia porque não está funcionando.

Talvez tenha outra forma de validar, mas não conheço pois sou novo na area, se tiver por favor me ajudem.

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Up's não são permitidos conforme a regra 3.8 (ver regras)

3.8 Não é permitida a postagem de mensagens com a finalidade de manter o tópico no início da lista (up), nem de mensagens que não se refiram ao assunto do tópico (flood). Caso isso ocorra, as mensagens serão excluídas e os autores, advertidos.

Testei o código aqui e funcionou perfeitamente. A função ficou assim:

xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4) {
        result = unescape(xmlhttp.responseText);
        if (result == '0') {
            document.body.innerHTML = "Usuario ou senha incorretos";
        }
        else {
            alert(result)
        }
    }
}

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpa Jonathan mais é que estou precisando urgente disso, e não acho em outro lugar ajuda.

Mas não funciona quando coloco no onsubmit do form ou no onclik do input do form, pois é nesse evento que deseja validar.

O result fica em branco, e passando direto para o php ele retorna certim, o problema está no javascript, so que não estou conseguindo identificar.

não é problema com o meu pc tb porque já testei em outro lugar e acontece a mesmo coisa.

O mais estranho é que quando habilito o"alert(xmlhttp.readyState)" ou dando qualquer mensagem nesse alert ele funciona so q fica aparecendo essas mensagens toda hora até o readyState ser 4. fica enviavel assim.

E tb eu uso esse mesmo codigo para fazer carregar em um <select> as cidades de um estado selecionado em outro <select> e funciona perfeitamente. Não entendo porque não está funcionando.

ninguém conhece outro jeito de fazer isso sem ser passando pelo GET direto para a pagina php.. sei la.. uma outra forma de pegar no javascript um echo dado por uma pagina php ????????

Link para o comentário
Compartilhar em outros sites

  • 0

Quando você habilita o alert(xmlhttp.readystate) você interrompe algum fluxo de transmissão de dados.

Como seu método é assíncrono, está havendo algum descompasso na função.

Talvez esteja usando o mesmo objeto ajax para fazer duas requisições, pode estar dando alguma zica. Divida o problema em partes pequenas para tentar achar o erro...

Abra um html novo e só coloque essa função ajax para retornar o que precisa.

O código está correto, não há o que alterar aí.

Link para o comentário
Compartilhar em outros sites

  • 0

Pois é KaKarotto. isso que está acontecendo mesmo.

Eu já fiz isso, coloquei num arquivo .js as funções e fiz um html puro so chamando essa função, com somente um input submit num formulario chamando essa função. Mas continuo o mesmo erro.

O que eu percebi que pode estar acontecendo, mas não sei se tem alguma coisa haver é o seguinte:

Quando coloco para chamar essa função no Onblur do input text aí funciona direitim, mas quando coloco no onclik do submit ou no onsubmit do formulario acontece isso.

Será que o fato dele estar tentando enviar um formulário está afetando não ???

porque ele envia o formulario e aparece a mensagem em branco.

Eu tentei criar uma outra função chamando essa, e essa outra função eu coloquei no onsubmit do formulario.

Passei a variavel result para global, e nessa outra função eu verifico o conteudo de result retornando true ou false.

Mas tb não deu, a variavel ficava como "undefinid". Ela perdia o valor quando entrava na função.

Mas quando coloco no onblur do input text funciona perfeito. Isso que não entendo.

não sei se isso está afetando, mais se tiver como faço para não enviar o formulario quando o conteudo de result for zero por exemplo ???????

Link para o comentário
Compartilhar em outros sites

  • 0

Problema chatinho ...

Seguinte, tira esse onclick do botão de submit e use esse código:

document.form1.onsubmit = function(){
            validaLogin(this.login.value, this.senha.value)            
            return false
        }

vê se funciona e me fala o resultado.

Link para o comentário
Compartilhar em outros sites

  • 0

Brigadão KaKarotto, mais hj a noite eu peguei pra mexer e arrumei uma forma de driblar esse erro.

Fiz o seguinte, já que o problema era chamar o Ajax no onsubmit do form, e no onblur funcionava, eu chamo a função no onblur da senha e no onblur do login, so proseguindo no codigo se os dois campos estiverem preenchidos, assim não importa a ordem de preenchimento dos campos.

Estando os dois preenchidos eu verifico no php se o login existe e se a senha bate com o login.

Até agora nada de novo.

O que mudei foi o seguinte, eu criei uma variavel global no javascript, e quando o result for 0 eu jogo false nessa variavel global.

E no onsubmit do formulario eu chamo uma outra função que verifica essa variavel global retornando true ou false.

Desse jeito funcionou perfeitamente.

Claro que se falando em sistema web néh, fica um pouco inviavel, porque se o usuario digitar uma coisa e depois concertar, trocando de campos irá fazer a verificação.

O ideal fosse que so verificasse no onsubmit do formulario. Mas por enquanto está beleza.

De qualquer forma vou tentar o que você falou e repondo se funcionou ou não beleza???

Brigadão a todos que tentaram ajudar, e desculpe o incomodo.

Abraços.

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,3k
×
×
  • Criar Novo...