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?
| |||
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 |
| ||||
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. |
| ||||
![]() 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! ![]()
__________________ ٩(͡๏̯͡๏)۶ "100 años después, la revolución no es con armas, es intelectual y digital" |
| |||
Lo importante es redireccionar al terminar tu proceso .. aunque sea a si misma .. vía: Código PHP: Un saludo, |
| ||||
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!! |
| |||
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, |
| ||||
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. |