Categorias

Arquivos

Verificar login com Ajax e Jquery

Postado em Agosto 22nd, 2007 por Alexandre Magno

PHP, Ajax, Jquery, Javascript

Vou mostrar neste post como validar em tempo real um login antes dele poder digitar a senha. Assim, quando o usuário digitar um login e pressionar TAB ou clicar com o mouse no campo de senha ele será alertado se este login é valido ou não. No exemplo que vou mostrar exibe um alerta, mas você pode fazer de outras maneiras, como mudar a classe do campo, adicionar uma mensagem, dentre outras coisas.

Usando ajax, você pode fazer requisições no servidor em qualquer evento javascript, seja um clique em um link ou um caractere digitado no teclado. Basta usar a imaginação e competência para usar no lugar certo e de uma maneira que facilite a vida, ao invés de complicar.

O raciocínio é o seguinte. Quando o usuário sair do campo de login (evento onBlur do javascript), uma requisição com o método $.post do Jquery será feita, passando o valor digitado no campo de login para ser processado. Se for encontrado algum registro no banco ele retorna em forma de xml o valor, caso contrário retorna outro valor. Esse valor então é processado na função de callback do método $.post e assim pode-se escrever um alerta ou usar o Jquery para fazer o que for preciso para alertar o usuário de que o login está errado.

Com poucas linhas de código é possível fazer isto com Jquery:

$("input[@name=login]").blur(function(){
var login = $(".login").val();
 
$.post("login_request.php",{login: login},
 
function(data){
 
var retorno = parseInt($(data, 'login').text());
 
if(retorno) {
 
alert("login encontrado");
 
// mais ações podem ser
 
// adicionadas aqui para o login
 
// encontrado
 
} else {
 
alert("login não encontrado");
 
// mais ações podem ser
 
// adicionadas aqui para o login
 
// não encontrado
 
}
 
});
 
});

No código acima, o campo com o atributo name com o valor login é selecionado e passado um evento blur do Jquery, que equivale ao evento onBlur do Javascript, ou seja, quando o usuário sair do campo ele é acionado. O valor do campo de login, que possui também uma classe login é guardada na variável login, para ser usado pelo método $.post do Jquery, que irá passar esse valor para o arquivo login_request.php que irá retornar o XML com a resposta do login encontrado ou não. O código do callback aceita como parâmetro data, que é o xml retornado para ser trabalhado com o Jquery, assim nas linhas:

 
var retorno = parseInt($(data, 'login').text());

O jquery seleciona o nó login e pega o valor dele através do método text. Preste bastante atenção na notação $(data,'login'). Ela procura uma tag login com a referência em data(o nó principal do xml, como se fosse o body). O parseInt irá transformar o valor em número, que é 1 para o login encontrado e 0 para o não encontrado. Assim a estrutura condicional abaixo irá emitir dois alertas caso retorne 1(verdadeiro) ou 0(falso).

O código do arquivo PHP encontra-se abaixo:

header('Content-type: text/xml');
 
$login = $_POST['login'];
 
include('global.php');
 
$db = conectar();
 
$consulta = "SELECT login from dados where nome='$login'";
 
$resultado = mysql_query($consulta,$db);
 
$encontrado = mysql_num_rows($resultado);
 
echo '
<principal><login>' . $encontrado . '</login></principal>';

O PHP irá fazer a consulta e irá verificar se há na tabela dados o login com o nome passado pelo método $.post do Jquery. Então ele irá retornar um XML com essa estrutura caso for encontrado:

 
<principal><login>1</login></principal>

Com isto fizemos passamos para o Jquery e trabalhamos como foi explicado acima.

O exemplo abaixo possui os seguintes logins na tabela para teste: alexandre, daniel e joao. Qualquer valor que não seja este digitado no login irá alertar como usuário não encontrado.

Verificação de login com Ajax utilizando o Jquery

Artigos relacionados


Comentários

Assine o RSS para comentários

tmferreira comentou:

27th Agosto, 2007 às 12:29 pm

Seria interessante utilizar JSON neste script.

admin comentou:

27th Agosto, 2007 às 3:14 pm

Sim, é uma boa opção, mas já notei que geralmente quem está iniciando tem mais dificuldade em JSON, mas aqui é um caso muito simples, só para dar um ponto de partida mesmo.

Rafael Santos Sá comentou:

30th Agosto, 2007 às 10:58 pm

Mto interessante teu blog cara, tava precisando encontrar mais pessoais experientes em jQuery…

a proposito, tu foi comentado lah no grupo oficial, viu lah??

Estou sem tempo para ler teus posts, mas amanha mesmo, varrerei todo.

admin comentou:

31st Agosto, 2007 às 12:52 pm

Muito obrigado Rafael e acabei de ver o comentário do Rey e já fiz a tradução e coloquei aqui no blog, dá uma olhada nos posts que pode ter coisa boa para você aí, se tiver qualquer dúvida ou sugestão, não hesite em falar.
O grupo realmente é muito bom, pena que não é acessível a todos por que é em inglês e ai que entra o esforço de difundir o que acontece lá e tornara acessível para nós. Não deixe de participar por que é com os comentários que realmente vejo que estão lendo e me anima cada vez mais… abraços!

Valter comentou:

5th Agosto, 2008 às 2:15 pm

Gostaria desse codigo completo do exemplo tem como?

menegaro@msn.com

Alexandre Magno comentou:

7th Agosto, 2008 às 10:08 am

@Valter: No post tem todos os códigos necessários para o funcionamento do script. Abraços….

Hugo Mendes comentou:

22nd Agosto, 2008 às 8:34 am

Ja li e reli mas n encontro, de onde vem o global.php?

Alexandre Magno comentou:

22nd Agosto, 2008 às 11:08 pm

@Hugo: Desculpe Hugo, o global apenas tem uma função chamada conectar que faz a conexão com o banco de dados. Você pode fazer da maneira que achar conveniente. Abraços e espero ter ajudado…

fabiano comentou:

28th Setembro, 2008 às 5:16 pm

Ôpa! Muito bom o post!
Uma dúvida, como você fez o redirecionamento, após validar os campos?
Quando faço requisições ajax e valido os dados com php não consigo redirecionar o usuário para outra página.
Já tentei usar o header, window.location, meta refresh, mas nada…
Abraços!

Alexandre Magno comentou:

29th Setembro, 2008 às 10:50 am

@fabiano: Por que você está querendo redirecionar? A ferramenta verifica previamente se existe o usuário, quando estiver ok o botão de enviar fará a autenticação normalmente. Ainda não é seguro efetuar um login inteiramente com ajax por que os dados são passados por javascript e eles ficam abertos. Você não precisa redirecionar o usuário, apenas deixe-o saber se este usuário está disponível e faça o login normalmente. Espero ter ajudado e boa sorte…

fabiano comentou:

1st Outubro, 2008 às 8:25 pm

Boa noite Alexandre,
Então, no meu caso o redirecionamento pode ser útil não só para login, mas também quando se concluí um cadastro e os dados em seguida, serão exibidos em uma lista. O usuário poderia receber uma mensagem do tipo ” Cadastro concluído ” e após alguns segundos ser redirecionado para a lista e visualiza-la. No caso do login, utilizo a requisição em Ajax para passar as variáveis para uma página em php, por método POST e nessa página faço a validação no BD. ( A validação no BD é feita em PHP). Após a validação, gostaria de redirecionar o usuário automaticamente para uma próxima página, mas só consigo exibir um link onde ele clica e abre uma nova página já dentro da sessao.
Não sei se fui muito claro..heheh
Mas agradeço a atenção.
Abraços!

Alexandre Magno comentou:

3rd Outubro, 2008 às 10:08 am

@fabiano: Você pode fazer o cadastro normal, e verificar o login por ajax. Se você enviar por post usuário e senha, esta senha vai ficar exposta, pois não existe uma encriptação oficial para ela que seja reconhecida pelo PHP e pelo banco. Acho que você deveria pensar na segurança primeiro. Boa sorte…

fabiano comentou:

7th Outubro, 2008 às 8:43 pm

Alexandre, obrigado pelas dicas!
Pensarei melhor sobre isso.
Em relação ao redirecionamento, você sabe me indicar onde posso encontrar material falando sobre redirecionamento com Ajax?
Como disse, pode ser útil para mim em outras situações.
Abraços!

Alexandre Magno comentou:

8th Outubro, 2008 às 5:36 pm

@fabiano: andei dando uma pesquisada e não achei nada concreto. Muitas pessoas levantaram este problema e houve várias restrições e problemas, como na requisição ajax a resposta não funcionar corretamente o location.href ou window.location. Deve haver maneiras melhores de fazer isto.

Caio comentou:

5th Novembro, 2008 às 3:51 pm

Alexandre
vc saberia se tem diferença com Asp
por exemplo…na pagina psso fazer a verificação no banco..tal
mas queria saber como enviar de volta pra pagina q tem o Jquery
vlw

Alexandre Magno comentou:

6th Novembro, 2008 às 8:21 am

@Caio: Não tem diferença, o lado servidor precisa apenas enviar uma respota para o jQuery na forma de XML por exemplo e o jQuery retornar. A requisição precisaria ser para um arquivo asp que teria um content-type XML e retornaria um xml que o jQuery poderia tratar facilmente, como no exemplo dado. Espero que tenha ajudado, boa sorte…

Deixe seu comentário

Os seguintes campos estão incorretos ou faltando

  • Listagem dos campos faltando
(Não será publicado) * Campos obrigatórios