Foros del Web » Programando para Internet » PHP »

Evitar una transaccion se realice dos veces

Estas en el tema de Evitar una transaccion se realice dos veces en el foro de PHP en Foros del Web. Hola; Mi duda es la siguiente: mi aplicacion debe realizar algo similar a una transaccion bancaria: el usuario rellena unos campos en un formulario (llamemoslo ...
  #1 (permalink)  
Antiguo 13/04/2005, 13:07
 
Fecha de Ingreso: julio-2004
Mensajes: 34
Antigüedad: 13 años, 5 meses
Puntos: 0
Evitar una transaccion se realice dos veces

Hola;
Mi duda es la siguiente: mi aplicacion debe realizar algo similar a una transaccion bancaria: el usuario rellena unos campos en un formulario (llamemoslo pag1.php). En la siguiente pagina (pag2.php) se le pregunta si los datos son correctos y esta seguro de llevar a cabo la transaccion. Si responde que si, se realiza la misma y se le informa de que se ha realizado. Mi problema es: ¿cómo evitar que el usuario pulse atras en el navegador y, volviendo por ejemplo a la pag2, pulse de nuevo el boton de enviar? (con lo uqe la transaccion se realizaria dos veces). A este respecto, no se como se comportan las aplicaciones usualmente.

Lo he solucionado parcialmente de la siguiente manera: una vez que el usuario ha realizado una transaccion, si pulsa hacia atras le devuelvo a la pagina principal de la aplicacion (con un sistema de banderas y modulos), de tal manera que para realizar otra transaccion tenga que empezar desde el principio.

El problema que le veo a esto es que el usuario, al pulsar el boton de atras, esta acostumbrado a ver la pagina que acaba de abandonar, asi que si le devuelvo a la index quiza le parezca confuso.
Por supuesto, la aplicacion dispone de botones para hacer todas las operaciones bien, pero la gente suele usar mas los botones de atras y adelante del navegador.

Quiza la pregunta sea algo confusa (y disculpad la parrafada) pero bueno, cualquier idea sera agradecida. Principalmente: ¿como se comportan las aplicaciones en estos casos?
Saludos.
  #2 (permalink)  
Antiguo 14/04/2005, 07:47
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No sé como has implementado tu sistema de "banderas y módulos" .. pero es eso lo que se debe hacer en esos casos .. No sé si usastes sesiones para tal fin (para definir tus "banderas") pero es lo que se suele usar.

Cita:
El problema que le veo a esto es que el usuario, al pulsar el boton de atras, esta acostumbrado a ver la pagina que acaba de abandonar, asi que si le devuelvo a la index quiza le parezca confuso.
Según ya tienes .. controlas en todo momento que se ha producido la situación de que tu usuario ha pasado denuevo por pag2.php o a accedido directamente cuando el procedimiento que has definido .. requiere que llegue a pag2.php desde pag1.php. En ese caso .. para evitar esa "confusión" a tu usuario .. en lugar de redireccionar a tu index.php automáticamente .. debes comunicar a tu usuario de ese hecho .. de que "no se puede volver atras" ..

Puedes usar una simple variable de control en el redireccionamiento que haces hacia index.php cuando se cumpla esa condición que ya controlas con tus banderas...

Genera un link tipo:
index.php?error=1

y en index.php

if (isset($_GET['error'])){
echo "Ha ocurrido un error .. NO puede volver atras o acceso incorrecto .. bla blabla";
}

Por supuesto que si usas sesiones .. puedes propagar esa variable de control en una variable más de sesión y no tener que andar propagandola en el URL ..

Un saludo,
  #3 (permalink)  
Antiguo 14/04/2005, 09:54
 
Fecha de Ingreso: abril-2005
Mensajes: 16
Antigüedad: 12 años, 8 meses
Puntos: 0
hola a todos, estoy mas o menos en la misma situacion que Elisa_d, solo que un poco mas atras, apenas me dispongo a enfrentar el problema.....

se me ha ocurrido que puedo utilizar JavaScript para controlar la pagina de referencia..., de hecho ya lo hago en otros casos...
pero que pasa en el caso que el usuario no utilice los botones "atras" , si no "Refrescar" o "F5"..se realizaria de nuevo la transaccion ??....

Hay otra forma que no sea con Java Script o con cookies??

Gracias
  #4 (permalink)  
Antiguo 14/04/2005, 10:13
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 13 años, 7 meses
Puntos: 0
Para realizar los procesos es adecuado tenerlo en una página independiente de proceso aparte que no sea esa página, por ejemplo, de la pag2-->proceso-->pag3, si de la pag3 regresa y da refrescar, pues no realizará nada, ya que el proceso de transacción se encuentra en otra página.
__________________
Julio Hernández
  #5 (permalink)  
Antiguo 14/04/2005, 10:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
se me ha ocurrido que puedo utilizar JavaScript para controlar la pagina de referencia..., de hecho ya lo hago en otros casos...
pero que pasa en el caso que el usuario no utilice los botones "atras" , si no "Refrescar" o "F5"..se realizaria de nuevo la transaccion ??....

Hay otra forma que no sea con Java Script o con cookies??
Ya hice mi comentario al respecto .. debes usar sesiones o cookies .. pero no javascript ni ver un "HTTP_REFERER" esas soluciones pueden no funcionar en todos los casos ni son seguras.

Un saludo,
  #6 (permalink)  
Antiguo 14/04/2005, 10:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por jchernandez
Para realizar los procesos es adecuado tenerlo en una página independiente de proceso aparte que no sea esa página, por ejemplo, de la pag2-->proceso-->pag3, si de la pag3 regresa y da refrescar, pues no realizará nada, ya que el proceso de transacción se encuentra en otra página.
Realmente da igual si está en un script a parte o es el mismo .. lo que si que hay que tener encuenta las "peticiones" .. es decir .. si se llama a si mismo el scritp o a otro .. Recordar que un script PHP al terminar el script (su ejecución) toda variable desaparece ... (por si las necesitas en otras) y .. por el mismo principio al declarar una variable de sesión lo que hacemos es "validar" esas variables si existen o no para detetectar si viene de una "petición" anterior (página linkeada, recarga de la misma .. etc) .. o no.

Un saludo,
  #7 (permalink)  
Antiguo 14/04/2005, 10:59
Avatar de magoote  
Fecha de Ingreso: agosto-2004
Ubicación: Patagonia - Argentina
Mensajes: 187
Antigüedad: 13 años, 3 meses
Puntos: 0
Para mi lo mas facil es usar sessiones en las que por ejemplo en la primer pagina 1.php al iniciar la operacion , ($_SESSIO[operacion]='encurso'), y mientras avanzas por las distintas paginas 2.php, 3.php, fin.php vas verificando de que esa variable de session este en 'encurso' sino lo mandas al index. Cuando terminas la operacion cerras la session [operacion], entonces cuando vuelva ya no tienen el valor correcto la session y te saca. Al iniciar una nueva operacion le das el valor de inicio a [operacion].
__________________
Desarrollo sitios web portales hosting Neuquen Argentina
• La imaginación es más importante que el conocimiento Albert Einstein (1879-1955)
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




La zona horaria es GMT -6. Ahora son las 06:54.