Ver Mensaje Individual
  #9 (permalink)  
Antiguo 12/07/2007, 16:55
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: sentencia if para enviar form

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,