none
Checagem de formulário não funciona durante a atualização RRS feed

  • 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>

     

     

     

     

     

     

     


     

     

     

    quinta-feira, 22 de fevereiro de 2007 21:14

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
    quinta-feira, 22 de fevereiro de 2007 22:11
  • 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

    sexta-feira, 23 de fevereiro de 2007 10:19
    Moderador
  • 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 ?

     

     

    sexta-feira, 23 de fevereiro de 2007 17:18
  •  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

    segunda-feira, 26 de fevereiro de 2007 12:10
    Moderador