Al enviar un formulario por el metodo POST, no puedes evitar que al actualizar la pagina
que proceso el formulario, se vuelva a enviar el formulario, con todas las variables seteadas, sin importar el codigo que le metas. Por lo tanto no tienes forma de saber si el
request viene del formulario, al presionar el submit, o del uso del F5 (
que tambien enviara el valor del submit, los campos ocultos y todo)...
La solucion? Lo que yo hago es, procesar el formulario, y en vez de enviar algo al navegador (mostrar contenido HTML) en esa misma pagina, abro otra, o en su defecto la misma, pero la vuelvo a abrir, usando un header('Location: ...');.
De esta forma, la pagina que proceso el formulario no queda registrada en el navegador, ya que no envio ningun tipo de contenido a el, sino que se proceso internamente en el servidor. Por eso, como no queda registro en el navegador, éste no podra volver a enviar los datos del formulario.
Lo que hago es algo asi:
Formulario: Código HTML:
<form action="Submit.php" method="post">
...
<input type="Submit" name="Submit" value="Submit">
</form>
Submit.php Código PHP:
<?php[/b]
if($_SERVER['REQUEST_METHOD'] == "post") {
// haces lo que tengas que hacer con el formulario, MySQL, etc...
header("Location: Submit.php");
exit;
}
echo "Se ha enviado exitosamente el formulario. Gracias!";
?>
Si el usuario presiona F5 cuando se le muestra el mensaje de confirmacion, como el
request no fue un form con POST, sino un header-Location, se volvera a mostrar el mensaje de confirmacion, mas no se procesara nada mas...
Un saludo,