Ir para conteúdo

POWERED BY:

Arquivado

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

Cesão

Validação dinâmica de formulário

Recommended Posts

Olá amigos,

 

Tenho o seguinte problema. No meu cadastro de usuários não pode haver repetição de e-mails no banco de dados, daí resolvi fazer uma vaildação dinâmica desta forma:

 

<%
Set RS= Server.CreateObject("ADODB.RecordSet")
SQL = "SELECT TXT_EMAIL FROM TBL_CLIENTES ORDER BY TXT_EMAIL ASC"
RS.Open SQL, Conn
		
do while not RS.EOF
%>
if(trim(document.form_cliente.txtEmail.value)=="<%=RS("TXT_EMAIL")%>"){
alert('Este e-mail já foi cadastrado! É permitido apenas um cadastro por e-mail.');
document.form_cliente.txtEmail.focus();
return;
};
<%
RS.movenext : loop : RS.Close
%>

Ou seja, ele baixava todos os e-mails do banco, comparava com o e-mail do input e via se era repetido, se fosse, ele dava o alert. Mas percebi hoje que ele acaba expondo no código fonte todos os e-mails do meu banco, e isso não pode acontecer. Alguém sabe alguma lógica diferente para que ele compare aos e-mails do banco e não deixe gravar outro igual, mas que não exponha os e-mails no código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

É pq o if é em javascript. Por isso ele fica fora da tag de ASP.

Essa função em Javascript está na mesma página do meu formulário, e ela é chamada quando clico no botão de enviar.

Daí ele confere se o e-mail digitado no input é igual a algum e-mail contido no BD. Se for, ele dá um alert e não deixa enviar. Mas o problema é que todos os e-mails estão sendo mostrados no código, pq é javascript. O while que criei em ASP faz com que a função se repita a cada e-mail existente no meu banco. Existe alguma outra lógica de se fazer, que não tenha que repetir a função?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao perai, me explica como que está sua pagina de cadastro.. o usuario insere apenas 1 email ou ele pode inserir uma lista?

 

Pq se você faz while, suponho que ele pode cadastrar uma lista de e-mails.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não não.. é apenas um cadastro por usuário, daí o que eu queria fazer era que ele não inserisse um e-mail já cadastrado. O que acontece é que, a lógica que pensei é assim: "vou pegar o e-mail digitado, comparar com todos os e-mails cadastrados no banco de dados. Se for igual a algum, não deixa cadastrar e dá um alert".

 

O problema é que não sei executar essa lógica com javascript puro. Daí pensei "vou fazer um while em ASP p repetir a função de comparação para cada e-mail do banco". Ou seja, se existir 3 e-mails no banco, ele vai repetir a mesma função 3 vezes. O problema é que isso deve carregar muito a página e, o pior, mostra toda a minha lista de e-mails cadastrados no meu código fonte...

 

QUando visualizo meu código fonte fica assim:

 

if(trim(document.form_cliente.txtEmail.value)=="email_exemplo@hotmail.com"){
				alert('Este e-mail já foi cadastrado! É permitido apenas um cadastro por e-mail.');
				document.form_cliente.txtEmail.focus();
				return;
			};
		
			if(trim(document.form_cliente.txtEmail.value)=="exemplo_email@hotmail.com"){
				alert('Este e-mail já foi cadastrado! É permitido apenas um cadastro por e-mail.');
				document.form_cliente.txtEmail.focus();
				return;
			};
		
			if(trim(document.form_cliente.txtEmail.value)=="email2@yahoo.com.br"){
				alert('Este e-mail já foi cadastrado! É permitido apenas um cadastro por e-mail.');
				document.form_cliente.txtEmail.focus();
				return;
			};

entendeu? daí ele vai repetindo todos os e-mails. Se o e-mail digitado for igual a algum deles, ele dá o alert e não deixa cadastrar.

O que quero fazer é que o javascript compare sim o e-mail digitado com os e-mails do banco, mas sem que se repita a função várias vezes e sem que os e-mails apareçam no meu código fonte.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ueh mas pq você nao faz assim... :

 

sql = "select email from TABELA_EMAILS where email = '"& request("email_do_form") &"'"
tab = conexao.execute(sql)
if not tab.eof then
'Significa que ja tem um email igual, entao mostre um alerta aqui
else
'insira pq nao tem email igual
end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então andreia_sp, isso funcionaria SE a função javascript estivesse na página PÓS envio do formulário, mas essas funções de validação estão na MESMA página do fomulário e acontecem quando o cara clica no botão p enviar, entendeu?

 

Quando o formulário vai ser enviado, ele NÃO envia, chama a função que valida os campos.. Se estiver tudo correto, essa função envia o formulário. Entendeu? Por isso que não tem como usar Request, pois o formulário ainda não foi enviado. Tenho que pegar o e-mail que acabou de ser digitado através do 'document.form_cliente.txtEmail.value'!

 

Vou te mostrar aqui como é a estrutura:

 

função:

<script language="javascript">
function enviadados(){
		if(document.formulario.Email.value==""){
			alert("Digite o e-mail.");
			document.formulario.Email.focus();
			return;
		};
	document.formulario.submit();
};
</script>

Chamando a função no envio do form:

<form name="formulario" method="post" action="formulario_envia.asp" onsubmit="enviadados(); return false;">
<input type="text" name="Email" id="Email" />
<input type="submit" value="Enviar" />

Entendeu? Daí quero que PARTE desta função compare o e-mail digitado com os e-mails do banco, daí eu tinha feito como mostrei nos posts acima, mas daí ele acaba repetindo essa parte da função por muitas vezes e acaba mostrando todos os e-mails do banco no código fonte. Gostaria de não repetir a função por causa do ASP e gostaria que os e-mails não aparecessem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cesão

 

nao tem lógica o modo como você montou

 

imagine quando o banco de dados estiver com 20 mil emails

ou 350 mil

 

ou 30 milhões ...

 

o correto é verificar depois que enviou.

 

se deseja que a verificação seja feita on-the-fly, pode usar Ajax para tornar dinamico, evitando redirecionamentos de paginas.

 

avalie melhor o que está fazendo

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom, e o que estou fazendo no fórum? hahaha

justamente pedindo ajuda de alguém p me dar um help na lógica e na montagem desse tipo de validação. haha

Eu PRECISO comparar o e-mail digitado com os 1000, 3000 ou 3.000.000 de e-mails cadastrados, isso é fato. Só nao sei a melhor forma de fazer.

 

Como eu mesmo disse, sei que essa forma que fiz não é a melhor, justamente pq repete a função e pq mostra meus e-mails no código fonte. Em ajax como eu faria? Teria que dar uma ação onblur no input de e-mail que chamaria uma página que comparasse o e-mail digitado com os e-mails do banco, certo? Mas não consigo montar esse tipo de programação. Me ajuda?

Compartilhar este post


Link para o post
Compartilhar em outros sites

a Andréia explicou no post numero 6 e em resposta você recusou o que ela sugeriu, insistindo em continuar fazendo da mesma forma.

 

escolha o modo como quer fazer e assim alguem poderá orientá-lo da melhor forma possível

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom, não é questão de "recusei o que ela sugeriu". você é que não deve ter lido tudo. A questão é: já vi e sei que existe uma forma de fazer a validação de um e-mail ANTES de o formulário ser enviado. Eu entrei aqui procurando uma forma de fazer com javascript puro. Não sei se é possível, mas esperava que alguém me ajudasse nessa solução. SE você LER O TÓPICO, vai ver que peço que se alguém tiver uma lógica nova, como AJAX ou algo assim, me ajude na montagem, pois eu não consegui pensar em como se montaria desse jeito. A única coisa que queria era que a validação fosse feita antes do formulário ser enviado, para poupar tempo. Se for fazer do jeito que a andreia_sp mandou, eu faria tranquilamente. Não sou leigo em ASP, mas sim em javascript, mas queria poupar tempo do usuário e já fazer a consulta no banco de dados para comparar os e-mails ANTES do formulário ser enviado.

você disse "o correto é verificar depois que enviou.".. Me desculpe, mas você está errado. Se você for ver os sites como box.net ou o twitter por exemplo, quando você vai trocar o nome de usuário, na hora que você digita ele já diz se é um usuário novo ou não. Sem ter que enviar o formulário.

 

Se você conhecer uma lógica que possibilite isso, por favor, me ajude. Senão, podemos tentar construir uma juntos. Não sei se seria javascript puro ou ajax. Se for ajax, o modelo que uso chamaria a página que compararia o e-mail em uma div dentro da página, mas tentei isso e ele não dá o aviso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se deseja que a verificação seja feita on-the-fly, pode usar Ajax para tornar dinamico, evitando redirecionamentos de paginas.

conforme comentei acima..

 

 

entao a sua dificuldade é usar Ajax ??

 

 

é bem simples

 

primeiramente com intuito de aprendizado, faça um exemplo simples usando JQuery

 

faça download do arquivo .js

http://jqueryjs.googlecode.com/files/jquery-1.2.6.min.js

 

crie os seguintes arquivos e execute na sua maquina local:

 

jquery.html

<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

<title>HTTP Trigger Test</title>
<script language=javascript src=jquery-1.2.6.js></script>

<script language=javascript>

	function abc( url ){
		$.get(url, function(data){
		  alert("Data Loaded: " + data);
		});
	}

</script>

</head>
<body>

	<input type=button value=test onclick="abc( 'http://localhost/pagina.asp' );">

</body>
</html>

 

pagina.asp

<%
response.write('FOO BAR')
%>

acredito que com isso você já pode ter uma noção básica e implementar conforme deseja.

 

se tiver dificuldade poste aqui.

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.