pq meu form de cadastro, qdo gera uma pagina de erro nao recupera os dados clicando no botao voltar, alguem sabe pq?
Nenhuma descrição foi enviada.
comentários (0)
suspender
Lista de Respostas:
29/03/2004 6:12am
(~21 anos atrás)
(~21 anos atrás)
Na verdade é mera questão de configuração. Alguns browsers trazem o valor, outros não. Mas nem sempre podemos contar com configurações do cliente.
O problema que deve estar passando é ao usar o comando javascript history.back() ou history.go(-1) a página volta vazia.
Isso acontece pois o history.back() retorna a página anterior, mostrando o que está em cache. E quando o navegador adiciona a página em cache ele faz antes de digitar valores.
É muito comum ocorrer mensagens de sessão expirada nesses casos, devido ao mesmo problema.
A solução?
É desanimador o que irei dizer, ainda mais se tiver um sistema grande desenvolvido, mas a única solução que sempre funcionará é não usar o history.back().
Nesse caso ao clicar em voltar, você terá que fazer um mecanismo que envie todas as variáveis para o form de cadastro e por sua vez, programar o form de cadastro para receber essas variáveis caso algum erro ocorra.
Ex:
Nome
[ ]
Idade
[ ]
[Enviar]
ao enviar o formulario com nome e idade você faz uma validação e vê que já existe esse nome cadastrado.
Então coloca na tela um botão voltar para ir ao cadastro.
Esse botão voltar faça ser um submit, se form uma imagem pode usar.
javascript:document.nomedoformulario.submit()
colocando um form com campos hidden (ocultos) contendo o valor dos campos.
<form name="form">
<input type="hidden" name="nome" value="<?=$nome?">
<input type="hidden" name="idade" value="<?=$idade?">
<input type="submit" name="submit" value="Voltar">
</form>
Um exemplo simples, mas a idéia é reenviar os dados.
Espero ter ajudado.
Grande abraço,
Alessander Thomaz
O problema que deve estar passando é ao usar o comando javascript history.back() ou history.go(-1) a página volta vazia.
Isso acontece pois o history.back() retorna a página anterior, mostrando o que está em cache. E quando o navegador adiciona a página em cache ele faz antes de digitar valores.
É muito comum ocorrer mensagens de sessão expirada nesses casos, devido ao mesmo problema.
A solução?
É desanimador o que irei dizer, ainda mais se tiver um sistema grande desenvolvido, mas a única solução que sempre funcionará é não usar o history.back().
Nesse caso ao clicar em voltar, você terá que fazer um mecanismo que envie todas as variáveis para o form de cadastro e por sua vez, programar o form de cadastro para receber essas variáveis caso algum erro ocorra.
Ex:
Nome
[ ]
Idade
[ ]
[Enviar]
ao enviar o formulario com nome e idade você faz uma validação e vê que já existe esse nome cadastrado.
Então coloca na tela um botão voltar para ir ao cadastro.
Esse botão voltar faça ser um submit, se form uma imagem pode usar.
javascript:document.nomedoformulario.submit()
colocando um form com campos hidden (ocultos) contendo o valor dos campos.
<form name="form">
<input type="hidden" name="nome" value="<?=$nome?">
<input type="hidden" name="idade" value="<?=$idade?">
<input type="submit" name="submit" value="Voltar">
</form>
Um exemplo simples, mas a idéia é reenviar os dados.
Espero ter ajudado.
Grande abraço,
Alessander Thomaz
03/04/2004 3:56pm
(~21 anos atrás)
(~21 anos atrás)
Quando tenho um form que tem muitos dados, do tipo cadastral, gosto de estocar os dados em cookies assim que o cara da um submit para que se ele cair, ou alguem erro acontecer, ele pode voltar ao form que os dados dele estarao la, mesmo se ele trocar o ip, ou algo mais acontecer. So da errado se ele deletar os cookies no meio do processo, o que e bem improvavel.
26/04/2004 2:42pm
(~20 anos atrás)
(~20 anos atrás)
Uma substituição pros cookies seria usar session...
27/04/2004 12:34pm
(~20 anos atrás)
(~20 anos atrás)
Quando trabalho com form, eu faço a validação e a inserção no BD geralmente na mesma página. Ex:
<?
if ($nome != "" and $mail != "") //só para verificar se nenhum campo ficou vazio
{
$arroba = "@";
$ValMail = substr_count($mail,$arroba);
/* a função sustr_count, conta quanta vezes o caracter aparece na string,
neste caso a usamos para verificar se o caracter @ aparece mais de uma vez
ou não aparece na string, assim validando um e-mail */
if ($ValMail != 1)
{
$erro = "E-mail inválido";
}
else
{
header ("location: proxima_pagina.php");
}
/* Se todos os campos forem válidos, ele redireciona para uma próxima página
caso contrário, retorna a mesma com a mensagem de erro */
}
?>
<html>
<head>
<title> Validação de form </title>
</head>
<body>
<?
echo "".$erro."";
?>
<form method="post" action="<? $PHP_SELF ?>" name="valida">
Nome:
<br>
<input type="text" name="nome" size="30" maxlength="50" value="<? echo $nome ?>"> <!--o value é que vai imprimir o valor novamente postado -->
<br>
E-mail:
<br>
<input type="text" name="mail" size="30" maxlength="50" value="<? echo $mail ?>">
<br>
<input type="submit" name="validadar" value="Validar e-mail">
</form>
</body>
</html>
<?
if ($nome != "" and $mail != "") //só para verificar se nenhum campo ficou vazio
{
$arroba = "@";
$ValMail = substr_count($mail,$arroba);
/* a função sustr_count, conta quanta vezes o caracter aparece na string,
neste caso a usamos para verificar se o caracter @ aparece mais de uma vez
ou não aparece na string, assim validando um e-mail */
if ($ValMail != 1)
{
$erro = "E-mail inválido";
}
else
{
header ("location: proxima_pagina.php");
}
/* Se todos os campos forem válidos, ele redireciona para uma próxima página
caso contrário, retorna a mesma com a mensagem de erro */
}
?>
<html>
<head>
<title> Validação de form </title>
</head>
<body>
<?
echo "".$erro."";
?>
<form method="post" action="<? $PHP_SELF ?>" name="valida">
Nome:
<br>
<input type="text" name="nome" size="30" maxlength="50" value="<? echo $nome ?>"> <!--o value é que vai imprimir o valor novamente postado -->
<br>
E-mail:
<br>
<input type="text" name="mail" size="30" maxlength="50" value="<? echo $mail ?>">
<br>
<input type="submit" name="validadar" value="Validar e-mail">
</form>
</body>
</html>
27/04/2004 1:27pm
(~20 anos atrás)
(~20 anos atrás)
Só complementando, da forma acima mostrada, ele exibirá todos os dados enviados, pois, ele foram enviados para a mesma página.
[]'s
Edson Marco
[]'s
Edson Marco