Si no dejas el proceso PHP en el script que debe mostrar una página (un mensaje de error/exito) no tendrías que tener problemas de ese estilo.
Se trata de "redireccionar" siempre que hagas un proceso PHP ..
Por ejemplo:
El típico proceso:
pido datos en un formulario HTML -> procesa.php
proceso.php Código PHP:
<?
// proceso PHP .. insertar datos en BBDD, enviar un e-mail .. etc.
// En general el script PHP que recibe los datos de un formulario HTML en método POST (no aplicable a "GET");
// Da igual si es el mismo script el que contenga el formulario o si es aparte.
if (todo bien){
echo "muestro mensaje";
}else{
echo "muestro mensaje";
}
?>
En este caso, si recargas la página . .el navegador almacena para esta página los datos que se le enviaron .. así que intentará enviarlos de nuevo y/o caducará la página (si usas sesiones sobre todo).
Lo
Correcto sería redireccionar al terminar el proceso a otro script .. aunque sea a si mismo, ahí el navegador "descarta" toda variable en "POST" que tuviera.
proceso.php Código PHP:
<?
// proceso PHP .. insertar datos en BBDD, enviar un e-mail .. etc.
// En general el script PHP que recibe los datos de un formulario HTML en método POST (no aplicable a "GET");
// Da igual si es el mismo script el que contenga el formulario o si es aparte.
if (todo bien){
header ("Location: mensajes.php?msg=ok");
exit;
}else{
header ("Location: mensajes.php?msg=error");
exit;
}
?>
De esta forma redireccionas a "mensajes.php" (por decir un ejemplo) .. ahí procesas vía la variable que le pasas el "mensaje" acorde que debes presentar. Si "recargo" la página no originaré un proceso nuevo en "procesa.php" pues ya estoy en "mensajes.php" .. si vuelvo hacia atras con mi navegador llegaré al formulario como si entrase por primera vez.
Un saludo,