Ver Mensaje Individual
  #8 (permalink)  
Antiguo 10/10/2006, 11:50
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 4 meses
Puntos: 129
El problema que plantean más bien se suele resolver NO dejando el proceso en el script siguiente que recibie los datos del formulario y que envia datos a este en metodo POST.

formulario.php -> procesa.php -> resultados.php

Formulario.php tendría nuestro formulario, .. procesa.php el código de validación etc .. y de ahí redireccionar a los resultados.

Esto es válido para un sistema de lógin (en la validación) .. esos procesos que envian un e-mail o meten datos en una BBDD .. etc.

El caso es NO hacer cosas como:

formulario.php
el formulario > "action" a resultados.php

resultados.php
Código PHP:
<?
echo $_POST['alguna_variable'];
// enviamos un e-mail po rejemplo .. u otro proceso ...
mail( ...);
if (
todo OK){
// presentamos un mensaje de exito.
} else{
// presentamos un mensaje de error.
}
?>
Si en nuestro "resultados.php" recargamos la página .. ahí veremos como se ejecuta nuevamente el proceso de esta, el navegador intentará enviar nuevamente las variables que tenemos en POST y el proceso se ejecutará tantas veces como nos cansemos de recargar la página.

Es importante "redireccionar" .. así "perdemos" todo lo que nuestro cliente almacenó en POST.

formulario.php
el formulario > "action" a procesa.php

procesa.php
Código PHP:
<?
echo $_POST['alguna_variable'];
// enviamos un e-mail po rejemplo .. u otro proceso ...
mail( ...);
if (
todo OK){
   
// Redireccionamos con un código de mensaje para procesarlo donde llegamos.
   
header ("Location: resultados.php?cod=exito");
   exit;
} else{
   
// Redireccionamos con un código de mensaje para procesarlo donde llegamos.
   
header ("Location: resultados.php?cod=error");
   exit;
}
?>
resultados.php
Código PHP:
<?
echo "El mensaje fué: ".$_GET['cod'];
?>
En este caso, nuestro "proceso.php" sea como sea su resultado, redirecciona hacia una página anexa antes de que el "HTML" pueda llegar a esta pues se hace por cabeceras HTTP. Si recargamos la página .. recargamos la del mensaje de error/exito y no la que realiza el proceso.

Acabo de exponer el ejemplo usando "tres" scripts .. esto no quiere decir que todo no se pueda hacer en un mismo -script- eso sí, tratado cada "fase" del mismo como un proceso individual recargando vía cabeceras HTTP ante cada "acción" a realizar: ver formulario, procesar y ver mensajes de error/exito.

Por otro lado ....

Creo que con cabeceras tipo "Private" además de las de "nocache" se solventa también el problema. No obstante este problema con este procedimento se soluciona de raiz.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.