Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/06/2010, 15:31
all-ill
 
Fecha de Ingreso: junio-2002
Mensajes: 750
Antigüedad: 22 años, 5 meses
Puntos: 22
Respuesta: recarga varias veces la web y consume

Como te ha dicho abimaelrc puedes usar la función header() hacia otra página.
Otra opción es usar sesiones. Crear una variable de sesión, después con un if() puedes comprobar el valor de esta variable y de una variable enviada por el formulario (un campo oculto por ejemplo), si esa variable de sesión es igual a la que tu has definido en primera instancia, procesar los datos y modificar el valor de la variable de sesión. La siguiente vez que se envíe el formulario al comprobar esta variable de sesión verá que el valor es diferente al inicial y por tanto puedes suponer que el formulario se ha enviado con anterioridad, por tanto en lugar de procesar los datos y/o volver a mostrar el formulario, puedes mostrar un mensaje (dentro de un else{} por ejemplo) indicando que el formulario ya ha sido enviado con anterioridad.

Una variación de este método sería comprobar si existe una variable de sesión especifica, si no existe comprobar si existen datos en $_POST para decidir si se muestra el formulario o si se procesan sus datos y se crea la variable de sesión, y una cláusula else{} en el caso de que la variable de sesión ya exista y por tanto se deban obviar los datos enviados.
Código PHP:
Ver original
  1. if( isset($_SESSION['form1enviado']) )
  2. {
  3.     if( isset($_POST['submit']) )
  4.     {
  5.         //procesar datos
  6.        $_SESSION['form1enviado'] = 1;
  7.     } else {
  8.        //mostrar formulario
  9.     }
  10. } else {
  11.     // mostrar mensaje de formulario anteriormente procesado
  12. }

Si se quiere también se podrían limpiar los datos de $_POST
Pueden haber más opciones (usar un token o identificador único para el formulario ya sea almacenado temporalmente en la base de datos o como sesión, etc.)
También dependerá del tipo de formulario que desees crear, ya que con el método indicado puedes tener problemas si se quiere permitir enviar el formulario más de una vez para distintos datos (para rellenar campos de una base de datos, etc.)

Otras opciones, aunque quizá menos efectivas, usar javascript para eliminar el historial de navegación por la página (para que no utilicen el botón de volver atrás) y desactivar la tecla F5 (pero si alguien utiliza el navegador sin javascript no servirá de nada)