Inquiridor
Checagem de formulário não funciona durante a atualização

Pergunta
-
Olá pessoal,
Seguinte, desenvolvi um sistema de newsletter onde os visitantes cadastram nome e e-mail. O caso é que para facilitar a navegação, o form "chama" a mesma página para a inserção dos dados. A inserção está ocorrendo perfeitamente, porém surgiu um "efeito colateral", se é que podemos chamar assim. Caso o visitante atualize a página, ou mesmo clique no botão voltar após passar para uma página, os dados são reinseridos ! Alguém sabe o porquê disso ? Desenvolvi um script em php usando basicamente a mesma técnica, e o resultado foi o mesmo... problema. Minhas dúvidas:
1. O browser mantem armazenado os valores de um form mesmo após o envio ? Seria esse o problema ?
2. Caso a reposta acima seja afirmativa, seria possível destruir uma variavel, ou então simular um "postback" como em formulários asp.net ?
Contornei o problema fazendo uma verificação se o e-mail já está cadastrado, mas o meu receio é estar criando objetos, fazendo pesquisas de forma desnecessárias, disperdiçando recursos do servidor.
Segue o código:
<%
nome_newsletter = ""
email_newsletter = ""
nome_newsletter = request.form("nome")
email_newsletter = request.form("email")
valor = request("valor")
if nome_newsletter <> "" and email_newsletter <> then
Set cm = Server.CreateObject("AdoDb.Command")
cm.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("base.mdb")&""
cm.CommandText = "Insert into newsletter(nome,email) values('"&nome_newsletter&"','"&email_newsletter&"')"
cm.Execute
nome_newsletter = ""
email_newsletter = ""
Set cm = Nothing
end if%>
<form action="principal.asp" method="post" onsubmit="return valida(this)">
<input type="text" name="nome" value= "<%=nome_newsletter%>" class="formulario" />
<br /><br /><br />
<input type="text" name="email" value = "<%=email_newsletter%>" class="formulario" />
<br /><br />
<input name="submit" type="image" src="imagens/enviar.jpg" />
</form>
Todas as Respostas
-
Amigo,
Isso é normal já que vc não pediu para nao armazenar cache, tente colocar essas tags na sua página pra obter o resultado que vc espera:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2000 00:00:00 GMT">
Essa data pode ser modificada para a data atual por exemplo, para mais detalhes sobre essas tags acesse:
http://support.microsoft.com/kb/234067/pt
http://www.html-reference.com/META_httpequiv_expires.htm
Espero ter ajudado.
[]'s -
JQS,
depois que é dado um submit em um formulário HTML, casos seja dado refresh, os dados são reenviados (o submit é reexecutado). É o equivalente a dar um "Voltar" no browser e clicar novamente no botão. Isso acontece com qualquer browser e independe da tecnologia.
Você tem que implementar algum controle, por exemplo, depois da execução de determinada ação, você teria que armazenar em algum lugar que o cliente já passou por ali. Se ele tentar novamente, lançaria alguma mensagem de erro. Algo assim...
Ricardo Oneda
http://oneda.mvps.org/blog -
Fala Diego,
Era exatamente isso que eu estava procurando ! Porém, por alguma razão... não consegui obter o resultado esperado. Coloquei tanto os "metas" diretamente, quanto através de response... mas não funcionou ! Alguma luz ?
Ricardo, será que uma sessão resolveria ? Mas caso exista um número grande de visitantes não existem um risco de queda de performance ?
-
JQS wrote: Ricardo, será que uma sessão resolveria ? Mas caso exista um número grande de visitantes não existem um risco de queda de performance ?
Não necessariamente. Existe um "mito" de que o uso de sessão degrada a performance. Na verdade, qualquer recurso quando mal utilizado impacta negativamente na performance. Se utilizado corretamente (sem guardar grandes quantidades de informação, um servidor com memória condizente, etc) não há problemas.
Ricardo Oneda
http://oneda.mvps.org/blog