Foros del Web » Programando para Internet » PHP »

bloquear envio de formulario al actualizar (F5)

Estas en el tema de bloquear envio de formulario al actualizar (F5) en el foro de PHP en Foros del Web. Tengo una página PHP con un formulario de contacto, cuyo ACTION llama a la misma página. El problema es que si actualizo (F5 o Refresh) ...
  #1 (permalink)  
Antiguo 25/04/2005, 18:10
 
Fecha de Ingreso: diciembre-2003
Mensajes: 1.583
Antigüedad: 20 años, 3 meses
Puntos: 13
bloquear envio de formulario al actualizar (F5)

Tengo una página PHP con un formulario de contacto, cuyo ACTION llama a la misma página. El problema es que si actualizo (F5 o Refresh) luego de haber enviado un mensaje, el formulario se vuelve a enviar.

¿Se puede arreglar eso?
__________________
El conocimiento es libre: Movimiento por la Devolución
  #2 (permalink)  
Antiguo 25/04/2005, 18:19
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años
Puntos: 2
A mi tambien me ha pasado.

Una solucion rapida, es que cuando procesas la pagina correctamente, redirecciona hacia una pagina de pantalla, es decir, hacia una pagina que solo dice... !! Bien hecho - Felicidades !!

Otras formas ya son mas complicadas y aplican segun el caso, esa es la mas rapida y facil

Suerte!!
  #3 (permalink)  
Antiguo 26/04/2005, 04:04
Avatar de Parzival  
Fecha de Ingreso: junio-2004
Ubicación: Vive en el foro
Mensajes: 190
Antigüedad: 19 años, 10 meses
Puntos: 2
Creo que te puede ser de utilidad también la función header(), con la que direccionas a una página concreta. Así cuando se envíe el script pones: "header("Location: pagina.php");" direccionando otra vez a la misma página y en teoría al darle a actualizar ya no tendría que volverte a mandar los datos. Al menos que yo recuerde a mi esto me funcionaba... Si no la otra opción es usar lo que dice Neuron_376 combinada con esta técnica, poniendo este script en una página aparte que redireccione otra vez a la página en cuestión.
  #4 (permalink)  
Antiguo 26/04/2005, 04:45
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
... de hecho no son métodos diferentes.. se trata de lo mismo; separar el proceso del resto...
formulario -> proceso -> resultados ... la única "diferencia" es que en este caso la página de resultado y de formulario sería la misma... pero el método es igual.

Saludos!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 26/04/2005, 09:29
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años
Puntos: 2
Jejeje

Exacto Jam, los metodos son los mismos.
  #6 (permalink)  
Antiguo 26/04/2005, 14:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Lo importante es redireccionar al terminar tu proceso .. aunque sea a si misma .. vía:

Código PHP:
<?
if (isset($_POST['submit'])){
    
// si se envió el formulario ...
   //proceso en general ...

   // redireccionar a donde corresponda.
   
header("Location: nose.php");
   exit;
} else {

// formulario ...
// aquí se define la página HTML con sus <html> .. <head> y demás .. NUNCA antes.! de este proceso.  
   
}
?>
Tal vez sea más facil entender el proceso si se usan scripts por separado .. pero en el fondo es lo mismo .. redireccionar y "aislar" el script o parte de proceso .. no mezclaro con "salida" que este pueda dar (como un mensaje de error/exito .. por ejemplo).

Un saludo,
  #7 (permalink)  
Antiguo 26/04/2005, 15:30
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años
Puntos: 2
Hola

En mi opinion, cuando es un mensaje de error, esta bien que no redirecciones, porque comunmente lo que pasa es que haces un BACK para volver a intentar llenar el formulario, y lo malo de los metodos (2 metodos) para redireccionar con PHP, es que te guarda en el historial por asi decirlo, las paginas, seria como:

1. formulario.php
2. proceso.php
3. resultados.php

Entonces, su en proceso.php haces un redirect hacia resultados.php y ahi un back, realmente caes en la misma pagina, es decir, resultados.asp, por eso en el error no es bueno redireccionar.

Suerte!!
  #8 (permalink)  
Antiguo 27/04/2005, 06:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Da igual si redireccionas o no ante un error ... eso sí .. si tienes que hacer un "back" a por ejemplo ese "formulario" .. tendras que devolver al mismo esas variables que tu script de proceso recibió (con una sesión no es nada complicado y efectivo). Personalmente no me gusta depender de "javascript" para esos casos o de como funcione un navegador si me va a respetar los valores ingresados o no .. temas de caché .. etc ...

Pero lo que si que es cierto .. que ante el proceso terminado correctamente .. es necesario "salir" de ese script (al menos de esa "petición") redireccionando hacia otro script o si mismo, para evitar los problemas que se describen aquí mismo.

Un saludo,
  #9 (permalink)  
Antiguo 27/04/2005, 09:51
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años
Puntos: 2
Por eso mismo...

Los problemas del chache, sesiones etc, son temas mas complicados, y lo mas sencillo cuando tienes un error en el proceso y lo mas comun es hacer un BACK (con el boton del navegador), o con una liga <a href="history.back()", entonces, esto es lo mas sencillo y te ahorra problemas de rellenar el formulario nuevamente, etc.

Por eso digo que cuando tienes un error, no es recomendable redireccionar (por lo menos en php, asp funciona diferente), por el problema de que si haces un back, quedarias de nuevo en la misma pagina que empezaste, ademas, de que la tercera pagina no puedes recuperar los datos de la primera:

1. formulario
2. proceso
3. resultados (error ó aceptacion)

Si hay un error en proceso y lo mandas a resultados, al momento de hacer un BACK (OJO - comun que los usuarios lo hagan en el navegador), el back te lleva a la pagina "proceso", donde encuentra el redirect nuevmente hacia "resultados"

En cambio si lo manejas asi.

1. formulario
2. proceso (error)
3. resultados (aceptacion)

Al momento que haces back llegas a formulario con todos los datos que ya habias llenado, esto pasa si lo haces con el boton del navegador o con una liga que tu pongas de history.back

Se que este en algunos casos cuando haces un back el formulario aparece vacio, pero no es lo mas comun, son casos raros por la configuracion de algunos clientes, ahi si entra lo que mencionas Cluter, de rellenar el formulario, pero para eso ya existen cosas mucho mas complicadas como session, o formularios anidados, etc.

Lo cual, si tienes un error y estas redireccionando hacia resultados el proceso para cargar el formulario seria mas complicado, porque, porque pagina 3 no puede recuperar los datos de pagina1, entonces en pagina 2 tienes que crear todo, ahora si, solamente session te salvaria de este caso, porque si usas algo con formularios, seria en pagina 2 crear el formulario, redireccionar con el metodo de submit automatico hacia pagina 3, etc.

Por eso digo que cuando tienes un error, lo mas recomendable es quedarte en esa misma pagina, asi las funciones normales del back seguiran siendo validas y correctas, y es lo mas comun que utilizan los usuarios

ANEXO: Algunos sitios para evitar este problema el BOTON BACK de los navegadores y que se les heche a perder todo, lo que haces es que cuando hay un error regresar al formulario y ahi mismo muestran los errores, en mi opinion es lo mas seguro, pero son procesos ya mas complejos.
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 20:25.