Redireccionando como comenta josemi con un "location" se solventa el problema. Incluso si lo mandas al mismo script (a si mismo) ..
Si has de presentar algún mensajito de que el proceso fué correcto (con exito) o hubo algún error/fallo ... Usa variables de control para gestionar dichos mensajes y los representas en la página que quieras (sea si misma u otras).
Ejemplo ... al terminar tu proceso .. IF fué ok todo:
header ("location: nose.php?msg=1");
Else ...
header ("location: nose.php?msg=2");
Ese "nose.php" podría ser una página centralizada donde muestres los mensajes de error/exito que a su vez espere un tiempo y redireccione a otro sitio (por ejemplo como lo hacen estos foros cuando insertas un mensaje ..). O la misma pàgina (script) que corresponda.
En el script/página que corresponda sólo tienes que ver si esa variable está definida para presentar el mensaje si corresponde:
Y .. si por ejemplo usas identificadores como "indices" de un array .. podrías tener todos tus mensajes en dicho array tipo:
Código PHP:
if (isset($_GET['msg'])){
// el array de mensajes ...
$msgs[1]="Mensaje 1 .. bla bla.. TODO OK";
$msgs[2]="Mensaje 2 .. bla bla.. OPS! un error";
// Recoger la variable de control ...
$id_msg=$_GET['msg'];
// mostrar el mensajito usando el indice de nuestra variable de control contra nuestro array de mensajes.
echo "Atención: ".$msgs[$id_msg];
}
Y .. ya está .. Con esta mini-técnica se solventan todos los problemas de "re-logins" .. "registros duplicados" (sucede cuando muestras los mensajes de error/exito en la misma página que haga el proceso de insertar registros en tu BD .. enviar e-mails .. etc ..)
Un saludo,