Procurando pela internet como fazer uma tela de login usando o prototype, achei esse um ótimo artigo escrito por Pedro Antunes. Não era bem o que eu queria, mas já deu uma luz. Pedi a ele que me explicasse melhor o seu código e pude então fazer o que estou postando aqui.
Para fins didáticos eu irei dar uma limpada do código, mas basicamente o código html é da seguinte forma:
<form name=”form_login” id=”form_login” method=”post” action=””>
<label for=”login”>Login</label><br />
<input type=”text” name=”login” id=”login” class=”input”/>
<br />
<label for=”senha”>Senha</label><br />
<input type=”password” name=”senha” id=”senha” class=”input”/>
<br /><br />
<input name=”entrar” type=”button” value=”Entrar” class=”button” onclick=”validarLogin()” />
</form>
<div id=”mensagem” style=”display:none”></div>
Mas o mais importante é como o javascript validarLogin() irá manipular a validação. Aqui está o segredo de tudo…
function validarLogin() {
var login = $F(‘login’);
var senha = $F(‘senha’);
var url = ‘validation.php’;
var pars = ‘login=’+login+’&senha=’+senha;
var myAjax = new Ajax.Request(
url,
{
method: ‘get’,
parameters: pars,
onComplete: mostraResposta
}
);
}
function mostraResposta(requisicaoOriginal) {
var msg = requisicaoOriginal.responseText;
if (msg == “OK “) {
$(“mensagem”).style.display=”none”;
document.location=’index2.php’;
} else {
$(“mensagem”).style.display=”block”;
$(‘mensagem’).innerHTML = msg;
}
}
O script submete para o validation.php o login e a senha. Com isso o arquivo verifica na base de dados se o usuário é valido ou não. Caso não seja, ele retorna “Login inválido”…
//trecho do validation.php
//verifica login
if !($validado) {
echo “Login Inválido”;
} else {
//setar as sessions
echo “OK”;
}
Retornando ao código ajax, pega-se o retorno do arquivo .php e verifica. Se for “OK”, ele torna o div “mensagem” invisivel e redireciona para index2.php. Caso contrario vai deixar o div “mensagem” visivel e vai printar o erro. Observe essa linha:
if (msg == “OK “) {
TEM UM ESPAÇO na frente do OK! Para funcionar a comparação é necessário esse espaço, pois o resultado do requisicaoOriginal.responseText vem com esse espaço. Mas não me pergunte o motivo. Alguma coisa obscura que talvez alguém consiga explicar. Eu não…
PS: Agradecimento especial ao Pedro Antunes que tirou toda minha dúvida!
Read Full Post »