Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Markos Lima

[Resolvido] Validação de campo de texto com bd.?

Recommended Posts

Olá pessoal, imagine que tenho um site onde as pessoas possam se cadastrar.

Quando o usuário for preencher o campo 'NOME', gostaria de fazer uma validação com o BD.

Por exemplo, se o usuário digitar um nome já cadastrado, aparecer na hora se está ou não disponível.

É semelhante quando você vai criar uma conta de email.

Com o PHP, consegui bolar um script, mas estava lendo a respeito, creio que irá precisar de uma outra linguagem que não entendo, o AJAX.

 

Obrigado !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim ..

 

<script src="ajax.js" type="text/javascript"></script>
<script src="funcoes.js" type="text/javascript"></script>
</head>
<body>
<fieldset>
   <legend>Usuario</legend>
       <form id="form1" name="form1" method="post" action="login.php">
           <div id="alerta"></div>
           <label>Login</label><br />
           <input name="login" id="login" type="text" maxlength="30" class="texto" onblur="javascript: envia('receber.php', 'POST', false);" /><br />
           <labeL>Senha</labeL><br />
           <input name="senha" id="senha" type="password" maxlength="30" class="texto" /><br />
         <input name="botao" type="submit" value="Enviar" />
   </form>
</fieldset>

ajax.js

function ajax() {
};
ajax.prototype.iniciar = function() {

   try{
       this.xmlhttp = new XMLHttpRequest();
   }catch(ee){
       try{
           this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
       }catch(e){
           try{
               this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
           }catch(E){
               this.xmlhttp = false;
           }
       }
   }
   return true;
}

ajax.prototype.ocupado = function() {
   estadoAtual = this.xmlhttp.readyState;
   return (estadoAtual && (estadoAtual < 4));
}

ajax.prototype.processa = function() {
   if (this.xmlhttp.readyState == 4 && this.xmlhttp.status == 200) {
       return true;
   }
}

ajax.prototype.enviar = function(url, metodo, modo) {
   if (!this.xmlhttp) {
       this.iniciar();
   }
   if (!this.ocupado()) {
       if(metodo == "GET") {
           this.xmlhttp.open("GET", url, modo);
           this.xmlhttp.send(null);
       } else {        
           this.xmlhttp.open("POST", url, modo);
           this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
           this.xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
           this.xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
           this.xmlhttp.setRequestHeader("Pragma", "no-cache");
           this.xmlhttp.send(url);
       }    

       if (this.processa) {
           return unescape(this.xmlhttp.responseText.replace(/\+/g," "));
       }
   }
   return false;
}

 

funçoes.js

 

function envia(url, metodo, modo)
{
   var login = document.getElementById('form1').login.value;
   remoto  = new ajax();
   xmlhttp = remoto.enviar(url + "?login=" + login, metodo, modo );
   if(xmlhttp) {
       document.getElementById('login').className = 'erro';
       document.getElementById('alerta').className = 'alerta2';
       document.getElementById("alerta").innerHTML = 'Esse usuario ja esta cadastrado';
   } else {
       document.getElementById('login').className = 'texto';
       document.getElementById('alerta').className = '';
       document.getElementById("alerta").innerHTML = '';
   }    
}

receber.php

<?php
$texto = $_REQUEST["login"];
// no lugar do if basta fazer uma conexao com o banco e um select pesquisando o nome do usuario se ja existe
if($texto == "Fulano") {
   echo true;
} else {
   echo false;
}    
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, ele só queria saber como fazer o SELECT...

 

 

 

SELECT COUNT(*) as total FROM tabela WHERE nome = nome_vindo_do_form;

 

Aí você testa se "total" é zero. Se for, pode cadastrar, senão o nome já está cadastrado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que entendi, ele só queria saber como fazer o SELECT...

 

 

 

SELECT COUNT(*) as total FROM tabela WHERE nome = nome_vindo_do_form;

 

Aí você testa se "total" é zero. Se for, pode cadastrar, senão o nome já está cadastrado

 

Não Beraldo , Ele quer por Requisição Ajax .. ja fazer a verificação quando o cara sair do campo

ou seja evento:

onBlur

 

E outra , se ele quiser so o que você falo ali , acho melhor ele usar mysql_num_rows ..

 

caso for isso entao seria

$query=mysql_query("query que verifica no banco");
if(mysql_num_rows($query) == 1){
print'<script> alert("Ja Existe Um Usuario Com Esse Nome"); </script>';
exit();
}else{
// script login ..
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

E outra , se ele quiser so o que você falo ali , acho melhor ele usar mysql_num_rows ..

 

caso for isso entao seria

$query=mysql_query("query que verifica no banco");
if(mysql_num_rows($query) == 1){
print'<script> alert("Ja Existe Um Usuario Com Esse Nome"); </script>';
exit();
}else{
// script login ..
}

 

a vantagem de retornar apenas a contagem é a velocidade da consulta.

Você retorna apenas um inteiro (4 bytes) em vez de retornar uma string de até 255 bytes ou um texto ainda maior que isso :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

:D so pra você entao amigo(sem ironia)

esses milesimos , vao tao rapido que quando voce atualizar a pagina ou submeter algo , ou ate mesmo mover o ponteiro do mouse rsrs ja foram 1 segundo

 

Para *UMA* consulta executada por *UM* usuário não muda quase nada mesmo

 

Pense num grande portal, com vários usuários executando isso ao mesmo tempo.

Poupar tempo de execução, por menor que seja, colabora com o load do servidor, deixando sua apliccação e seus usuários mais felizes.

 

 

Enfim, faça como achar melhor... o sistema é seu mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ae pessoal, fiz uma pergunta, e parece que teve um pequeno atrito aqui.

A minha dúvida é o seguinte:

 

Sabe quando você vai fazer um email, e na hora de escolher um email, já lhe responde na hora se está ou não disponível.

 

Eu tenho uma tabela no BD, e um campo "NOME", eu gostaria que esse campo não repetisse.

Quando o usuário for cadastrar um nome, gostaria que apareça se este nome está disponível.

 

Sei que tenho que fazer uma consulta, fazer uma condição, (Se o campo "nome" for igual um nome da consulta a resposta vai ser "indisponível" caso contrário "dispoivel") desse modo só irá aparecer quando o usuário clicar em cadastrar, certo?

 

Mas gostaria que quando ele acabasse de digitar, que apareça na hora se está ou não disponível.

Estava lendo a respeito e vou ter que utilizar AJAX, mas dessa linguagem não entendo.

 

Beraldo e Fewdox,

Obrigadoo pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ajax não é uma 'linguagem', a linguagem por trás do ajax, é o javascript

 

dispare a requisição no evento onblur do input, busque, e traga a resposta.

exemplo com jQuery:

http://www.wbruno.com.br/blog/?p=3

Compartilhar este post


Link para o post
Compartilhar em outros sites

ajax não é uma 'linguagem', a linguagem por trás do ajax, é o javascript

 

dispare a requisição no evento onblur do input, busque, e traga a resposta.

exemplo com jQuery:

http://www.wbruno.com.br/blog/?p=3

YeaHh

 

Concordo 100%

Compartilhar este post


Link para o post
Compartilhar em outros sites

ajax não é uma 'linguagem', a linguagem por trás do ajax, é o javascript

 

dispare a requisição no evento onblur do input, busque, e traga a resposta.

exemplo com jQuery:

http://www.wbruno.com.br/blog/?p=3

 

William, seu site ta com algum problema?

 

Não to conseguindo acessar.

 

Vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

está numa revenda da locaweb.

 

salva nos favoritos ai, estão em manutenção, já já o servidor volta pro ar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

está numa revenda da locaweb.

 

salva nos favoritos ai, estão em manutenção, já já o servidor volta pro ar.

 

 

Eita... essa locaweb heim...

 

Isso lá é horas pra manutenção, rsrsrs

 

Tbm tenho uma revenda em outra empresa, eles normalmente programam manutenção para madrugadas, de preferencia feriados ou final de semana.

 

Nesse link do seu blog, tem um tutor de como fazer isso é?

Achei interessante isso!

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara, sou ruim pra explicações.

 

lá tem um código bem simples, ridicularmente fácil, com alguns comentários.

qq dúvida pergunte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.