Foros del Web » Programando para Internet » PHP »

Evitar reemviar contenido al actualizar con F5

Estas en el tema de Evitar reemviar contenido al actualizar con F5 en el foro de PHP en Foros del Web. Hola. Quisiera saber si existe alguna forma de impedir que un formulario se envié mas de una vez. Por ejemplo, si tengo un formulario para ...
  #1 (permalink)  
Antiguo 06/11/2008, 13:05
Avatar de Snd234  
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 16 años, 11 meses
Puntos: 2
Evitar reemviar contenido al actualizar con F5

Hola.

Quisiera saber si existe alguna forma de impedir que un formulario se envié mas de una vez.

Por ejemplo, si tengo un formulario para insertar un registro en una base de datos, y envió, muestro el resultado de la operación, si se inserto o no correctamente. Pero, si actualizo la pagina (con F5) esta información se reenvía e inserta un nuevo registro. Se puede controlar eso?
__________________
KIBIT.cl
  #2 (permalink)  
Antiguo 06/11/2008, 13:10
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Evitar reemviar contenido al actualizar con F5

Sí. Con variables de sesión.

Yo lo que hago en mis pruebas es, en la página del formulario, si los datos son validados creo una variable de sesión (en la función de validación) y redirijo con 'header' a la página que procesa lo que toque.

En esa otra página, primero hago una comprobación (un 'if' pelao y mondao) por si esta variable está creada, y si no es así, redirijo donde toque (generalmente a la página del formulario). Y acto seguido, uso 'unset' para eliminarla, de modo que si llegó aquí desde el formulario, al recargar la página y ya no estar, activaría el 'if' anterior.

También te sirve por si alguien accede a la página directamente escribiendo la url, sin pasar antes por el formulario y validando los datos.

Un saludo.

Última edición por Deschamps; 06/11/2008 a las 13:23 Razón: Deschacer la edición anterior para añadirlo a la nueva respuesta
  #3 (permalink)  
Antiguo 06/11/2008, 13:10
Avatar de gVenom  
Fecha de Ingreso: julio-2008
Ubicación: Costa Rica
Mensajes: 1.458
Antigüedad: 15 años, 9 meses
Puntos: 53
Respuesta: Evitar reemviar contenido al actualizar con F5

Saludos.

Si entendi bien, cuando envias los datos esto te carga otra página donde te informa si los datos se insertaron correctamente? o aparece en la misma página? Porque si es la primera opción puedes ponerle un redireccionamiento a la página que muestra el resultado para que vuelva a la anterior.
__________________
"Al que venciere y guardare mis obras hasta el fin, yo le daré autoridad sobre las naciones."
Apocalipsis 2: 26
Servicios para Pymes http://dst.co.cr
  #4 (permalink)  
Antiguo 06/11/2008, 13:21
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Evitar reemviar contenido al actualizar con F5

El esquema con código sería éste:

"formulario.php" (nota: el action del formulario apunta a esta misma página. La función 'validar_formulario', implementada en 'funciones.php', define la variable de sesión 'validado' y retorna 'true' si los datos recogidos en $_POST son correctos)
Código PHP:
<?php
    
include_once( "funciones.php" );
    
session_name"info_pruebas" );
    
session_start();

    if ( 
validar_formulario$_POST ) ) {
        
header"Location:resultado.php" );
    }

    echo 
cabecera_pagina();
    ......
"resultado.php" (nota: ésta es la página que realiza las acciones. Los datos del post puedes pasarlos recuperarlos con un array de sesión o como desees)
Código PHP:
<?php
    
include_once( "funciones.php" );
    
session_name"info_pruebas" );
    
session_start();

    if ( !isset( 
$_SESSION['validado'] ) || !$_SESSION['validado'] ) {
        
header"Location:formulario.php" );
    }

    unset( 
$_SESSION['validado'] );
    .....

Última edición por Deschamps; 06/11/2008 a las 13:25 Razón: Añadir el código
  #5 (permalink)  
Antiguo 06/11/2008, 13:48
Avatar de Snd234  
Fecha de Ingreso: mayo-2007
Ubicación: Frente al PC
Mensajes: 413
Antigüedad: 16 años, 11 meses
Puntos: 2
Respuesta: Evitar reemviar contenido al actualizar con F5

Ya lo logre :)

No fue exactamente la solución que planteaste pero si me ayudo a desarrollarla.

En el sistema que estoy desarrollando utilizo varias paginas para distintas acciones o procesos, la idea es mantener cada pagina lo mas simple posible.

Entonces, tengo una pagina que es de un formulario que envía a otra similar para procesar ese formulario.

Entonces, a cada pagina que es un formulario y que inserta algún registro en la base de datos, creo una variable en la sesión.

Código PHP:
$_SESSION['insertar'] = true
Entonces, cuando yo envíe este formulario, la siguiente pagina lo recibirá y verificara si esa variable en la sesión existe. Si es así, entonces la elimino (luego de verificar) y hago la acción correspondiente del registro en la base de datos y muestro el resultado. Luego, si actualizo esa misma pagina, se comprobara que la variable no existe, por lo que redireccionara a la pagina original del formulario.
__________________
KIBIT.cl
  #6 (permalink)  
Antiguo 06/11/2008, 14:12
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Evitar reemviar contenido al actualizar con F5

De hecho el tuyo es un planteamiento muy similar. La única diferencia es que yo valido antes de llegar al documento que procesa, es decir nunca redirige al destino si no "valida", mientras que tú llegas al documento que procesa (el destino) y si no "valida" retrocedes hacia atrás. Pero para gustos...

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:31.