navegar de volta com o envio do formulário PHP
sempre que uso o botão de trás do navegador, recebo sempre o erro: ERR_CACHE_MISS e preciso de actualizar a página e depois confirmar que realmente quero voltar a apresentar os dados.
Há alguma maneira de resolver isto, para que os meus clientes possam usar o botão de volta como deviam.Aqui está o texto completo que o navegador me fornece:
Esta página web necessita de dados que introduziu anteriormente para ser devidamente exibido. Você pode enviar esses dados novamente, mas ao fazê-lo você vai repetir qualquer ação esta página realizada anteriormente. Reler isto pagina. Carregue no botão Recarregar para voltar a apresentar os dados necessários para carregar pagina. Código de erro: ERR_CACHE_MISS
5 answers
Quando você publicar formulários com php, ou qualquer outro tipo de dados, você pode voltar para a página e encontrar uma mensagem no navegador, como o "Documento Expirado" ou "Confirmar Formulário de Reapresentação Com o google Chrome". Estas mensagens são uma precaução de segurança que o navegador usa com dados sensíveis, como variáveis de post. O navegador não lhe dará automaticamente a página Nova novamente. Você deve recarregar a página clicando em tentar de novo ou com uma atualização da página. Então, funciona como seria de esperar.
No entanto, o programador php pode trabalhar em torno da mensagem irritante do navegador, adicionando um pequeno código no script. O exemplo mostra um par de linhas de código que pode ser adicionado acima session_start (), a fim de ser capaz de ir e voltar para a página quando você postar sem qualquer interrupção.O modo "private_no_expire" significa que o cliente não receberá o cabeçalho expirado em primeiro lugar.
header('Cache-Control: no cache'); //no cache
session_cache_limiter('private_no_expire'); // works
//session_cache_limiter('public'); // works too
session_start();
esta página web necessita de dados que você introduziu mais cedo, a fim de ser exibido corretamente. Você pode enviar esses dados novamente, mas ao fazê-lo você vai repetir qualquer ação esta página realizada anteriormente. Carregue em Recarregar para reenviar os dados e mostrar esta página.
Por causa das práticas de codificação desleixadas dos navegadores de desenvolvedores web foram forçados a adicionar esta mensagem. o cenário é como segue:1) o utilizador preenche o formulário e apresenta (formulário de mensagens) 2) o servidor processa os dados post e responde com uma nova página (Confirmar) marcada como não cacheável 3) o usuário navega para uma nova página. 4) o utilizador Pressione de volta:
Para o navegador mostrar a Página no Passo 2, porque a sua marcação no-cache, ele deve requisitá-lo a partir do servidor, em outras palavras fazer o repost dos dados (Fazer Passo 1). aqui está o código desleixado chegou, se este era um cartão de crédito, e repost a detecção não estava no servidor, o cartão é cobrado duas vezes. este era (is) um problema tão comum, que os navegadores tinham que detectar isso e avisar os usuários.
A melhor correção é no passo dois, o servidor envia um redirecionamento para a página de confirmação. em seguida, quando o usuário acessa a confirmação através do histórico ou de volta, é um pedido get, não um pedido de post e não vai mostrar o aviso.
Nota: O modelo postback da webform presta - se a este problema. também evite transferências de servidores.Minha solução
$_SESSION ['home'] Usado para guardar quaisquer erros na página inicial.
$_SESSION ['tempEmail'] usado para ecoar o valor na forma php.
Nota: Use uma variável de sessão única para cada página que tenha um formulário HTML para o tratamento de erros e também qualquer variável de sessão para cada valor que seja ecoado no formulário HTML.
<?php
session_start();
//Initialize variables not initialized without overwriting previously set variables.
if(!isset($_SESSION['home'])) {
$_SESSION['home']="";
$_SESSION['tempEmail']="";
}
Opcional - se estiver ligado, atribuir o endereço de E-mail à variável $_SESSION['tempEmail'] (se não tiver sido feito anteriormente) para pré-preencher o formulário HTML.
if(isset($_POST['Submit'])){
---your code---
//Error message(s) examples
$_SESSION['home'] = "Email and Password do not match, please try again.";
header("Location: " . $_SERVER['REQUEST_URI']);
$_SESSION['home'] = "Email address format is invalid. Please recheck.";
header("Location: " . $_SERVER['REQUEST_URI']);
//success
unset ($_SESSION['home']); //optional, unset to clear form values.
header ("location: nextpage.php");
---or---
header("Location: " . $_SERVER['REQUEST_URI']); //re-post to same page with the $_SESSION['home'] success message.
}
?>
<body>
Margem de Erro
<span><strong class="error"><?php echo $_SESSION['home'] ?></strong></span>
HTML form
<form action="#" name="loginform" method="post" >
<input type="text" name="userEmail" maxlength="50" title="Enter Your email" autocomplete="off" value="<?php echo htmlspecialchars($_SESSION['tempEmail']); ?>" placeholder="enter email" required/>
<input type="submit" name="Submit" value="Submit">
</form>
</body>
Não se recomenda a sua utilização na página de pagamento, Ver discussão acima. Testada em Firefox, Cromo, Safari e IE9. As mensagens irritantes desaparecem quando se usa o botão de trás. Certifique-se de que o buffer de saída Está ligado no seu programa php ou php.ini para evitar avisos de cabeçalho. Podes verificar o teu php.processo ini para o seguinte;
output_buffering=On
Encontrei isto usando apenas:
header('Cache-Control: no cache'); //disable validation of form by the browser
Resolva o problema
session_start()
:
session_cache_limiter('private, must-revalidate');
session_cache_expire(60);
Boa sorte.
<?php
if(isset($_POST['submit']))
{
//submission goes here
}
?>
Era isto que estavas a pensar?
Editar-SQL é realmente uma coisa bonita para trabalhar, vejo que foi adicionado como uma recomendação em um comentário, e concordo em usar SQL se você puder, seu rápido, intuitivo e eficiente.