Jump to content


Photo

Verificar Disponibilidade


  • Faça o login para participar
8 replies to this topic

#1 viniciusjau

viniciusjau

    Veterano

  • Usuários
  • 1492 posts
  • Sexo:Masculino
  • Localidade:Jaú
  • Interesses:Web Designer em Geral

Posted 20/06/2007, 00:40

E ai galera, estou tentando verificar se um nome está disponivel pro usuario cadastrar antes dele apertar o botão Submit

Fiz isso aqui:

<script type="text/javascript">
var xmlHttp;

function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}

function startRequest() {
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
//xmlHttp.open("get", "teste2.php", true);
xmlHttp.open("get", "teste2.php?login=" + document.getElementById('login').value, true);
// xmlHttp.send("login=" + document.getElementById("login") + "&endereco=" + document.getElementById("endereco"));
xmlHttp.send(null);
}

function handleStateChange() {
if(xmlHttp.readyState == 4) {
if(xmlHttp.status == 200) {
document.getElementById("resultado").innerHTML = xmlHttp.responseText;
}
}
}
</script>
<form action="#" name="formulario">
<input type="text" name="login" id="login" class="form"><a href="#" onclick="startRequest();">Verificar disponibilidade</a>
</form>

<div id="resultado"></div>


e na pagina teste2.php

<?php
include "conexao.php";
$login = $_REQUEST['login'];

if ( $login <> ""){
//Codigo para verificar se existe o login cadastrado
$sql = mysql_query("SELECT id FROM tabela WHERE nome='$login'");
$contar = mysql_num_rows($sql);
if($contar > 0) { $erro = "2"; } else { $erro = "3";}

} else {

$erro = "1";
}

if ($erro == "1") { $msg="Login nao informado"; }
if ($erro == "2") { $msg="Login ja cadastrado"; }
if ($erro == "3") { $msg="Login Disponivel"; }

echo $msg;
?>


O codigo está funcionando corretamente, porém eu queria que não fosse necessário o usúario clicar no botão "verificar disponibilidade"

Queri fazer qeu conforme ele fosse digitando já aparecece a resposta...
alguém sabe como posso fazer ?

#2 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 20/06/2007, 08:42

Chama a função startRequest() no seu campo com um onkeyup, onblur ou onchange.
<input type="text" name="login" id="login" class="form" onkeyup="startRequest()" />

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#3 Renan Gonçalves

Renan Gonçalves

    Web Developer

  • Usuários
  • 771 posts
  • Sexo:Masculino
  • Localidade:São Paulo, SP
  • Interesses:Programar PHP, Java (e JSP), Javascript (com Ajax, claro), Ruby (on Rails) !

Posted 20/06/2007, 08:52

Sim, mas isso irá consumir MUITO a rede.
A CADA letra o script fazer um request é meio grotesco.

O ideal, na minha forma de pensar, é que depois de um certo número de letras você começar a fazer as requisições, dessa maneira (com 6 caracteres):
<input type="text" name="login" id="login" class="form" onkeyup="if (this.value.length >= 6) { startRequest(); }" />

Ou então após 6 caracteres (ou seja lá qual será o minimo) voce executar o script e este script lhe trazer UM ARRAY com todos os logins que comecam com estes 6 primeiros caracteres. E então, se exister o login digitado dentro deste array, não pode registrar.
Com isso você consegue poupar muitos requests.

Entendeu ?


[]`s

Renan Gonçalves
renan.saddam@gmail.com
(WebSite / Gmail / orkut / Windows Live! Messenger
)

"Aquele que se define se limita."


#4 viniciusjau

viniciusjau

    Veterano

  • Usuários
  • 1492 posts
  • Sexo:Masculino
  • Localidade:Jaú
  • Interesses:Web Designer em Geral

Posted 20/06/2007, 09:02

Legal alex, o onKeyUp funcinou certinho...

Porém agora fiquei encucado com o que o renan disse... Acho que vou fazer essa verificação somente quando o cara sair desse campo... ( acho que é o onchange que uso para fazer isso ? )

Vocês acham que mesmo assim vai continuar pesado...
eu ainda pretendo incluir mais algumas funções nessa verificação.. como retirar espaços e colocar todos as letras em minusculo.

Edição feita por: viniciusjau, 20/06/2007, 09:05.


#5 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 20/06/2007, 16:06

Evento de quando perde foco é onblur.

Concordo com o Renan, mas eu não faço a requisição após 'x' caracteres. Faço após 'x' segundos de inatividade no campo. Exemplo, 2 segundos. A cada keyup eu faço um setTimeout na requisição com 2 segundos, se por acaso uma outra for feita em menos de 2 segundos eu cancelo a anterior e mando uma nova com mais 2 segundos.
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...

#6 viniciusjau

viniciusjau

    Veterano

  • Usuários
  • 1492 posts
  • Sexo:Masculino
  • Localidade:Jaú
  • Interesses:Web Designer em Geral

Posted 20/06/2007, 16:13

legal cara.. valeu pelas dicas..
só pra matar o topico agora.. como eu posso enviar os dados para que não de aquele pau da acentuação ?

eu tava navengado aqui no forum.. e inclui essa linha no meu codigo:

function startRequest() {
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
//xmlHttp.open("get", "teste2.php", true);
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.open("get", "cadastra_ver.php?nome=" + document.getElementById('nome').value, true);
//xmlHttp.send("login=" + document.getElementById("login") + "&endereco=" + document.getElementById("endereco"));
xmlHttp.send(null);
}


mas só que não deu muito certo...

#7 lwirkk

lwirkk

    Veterano

  • Usuários
  • 1314 posts
  • Sexo:Não informado

Posted 30/06/2007, 02:58

Eu acharia melhor quando sair do campo, pois é o modo também que o IPB usa se não me engano. E que não gastaria muito tráfego. :)
Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#8 Gustavo Macedo

Gustavo Macedo

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 01/08/2007, 00:55

Olá pessoal,

De ante-mão gostaria de agradecê-los pelo código, muito bom, quebrou um "galhasso"!
Porém, notei que ele só funcionava no IE, ai adaptei o código para que rodasse nos outros browsers.

Alterem essas linhas:

var xmlHttp;
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}

Para:

var xmlHttp;
function createXMLHttpRequest() {
if (window.XMLHttpRequest) { // Mozilla, Safari,...
xmlHttp = new XMLHttpRequest();
if ( xmlHttp.overrideMimeType) {
xmlHttp.overrideMimeType('text/xml');
}
} else if (window.ActiveXObject) { // IE
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch ( e ) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch ( e ) {}
}
}
if (!xmlHttp) {
alert('Giving up : ( Cannot create an XMLHTTP instance');
return false;
}
}


e

Essa linha:

xmlHttp.open("get", "teste2.php?login=" + document.getElementById('login').value, true);

Para:

xmlHttp.open("get", "teste2.php?login=" + document.all('login').value, true);


Rápido e rasteiro! :lol:

Espero ter ajudado.

Se algum programador ASP quiser, eu adaptei esse código para a linguagem.
Basta me pedir através do email: gustavo@cubico.com.br

Edição feita por: Gustavo Macedo, 01/08/2007, 00:58.


#9 bimonti

bimonti

    Super Veterano

  • Usuários
  • 2654 posts
  • Sexo:Masculino

Posted 01/08/2007, 10:51

Não seria alterar document.all para document.getElementById ?? Você colocou ao contrário, e até onde meu humilde conhecimento vai, o document.all só funciona no IE.... ou eu entendi errado sua colocação. Mas valeu pela correção do post, 100%.
WebFórum - Equipe de Desenvolvimento - Monitor
Posted Image
Yeah I do have some stories, and it's true I want all the glory ...




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq