entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Duda sobre funcionamiento de PHP y MySQL

Hola a todos!

Mi preguntas son las siguientes:

¿Que pasa cuando un usuario cierra una página web y se estaba realizando una operación de alta baja o modificación sobre una base de datos MySQL? ¿La operación termina de realizarse, se hace a medias o no se hace? ¿Y si el usuario en vez de cerrar la página, presionó el botón de detener y luego volvió a enviar el formulario; se produce un "doble submit"? ¿Cómo evitar problemas con esto? ¿Y qué pasa si las peticiones se realizan a través de AJAX?

Saludos!

1 Respuesta

3votos

Leonardo-Tadei Puntos227320

Hola @pedrourday,

1) no pasa nada, porque el modelo de conexión en la web es stateless. Si la petición llega al servidor, se ejecutará completa, y si no llega, no se ejecutará.

2) como las peticiones HTTP se envían al intérprete PHP después de terminar, no se puede hacer una operación a medias.

3) si el usuario por cualquier motivo, envía 2 veces lo mismo al servidor, se procesará dos veces. En este escenario no se llama "doble submit": eso es cuando se hace doble click en un botón y el navegador envían 2 petiones iguales una atrás de otra.

4) cuál sería el problema? Si te referís a que no se envíe dos veces lo mismo por accidente, una técnica habitual es deshabilitar el botón de envío luego del click... pero nada impide por ejemplo que un usuario complete dos veces el mismo formulario y lo mande al servidor!
Si tenés validaciones de modelo que limiten que se haga dos veces lo mismo, deberían estar implementadas en el servidor.

5) con las peticiones desde AJAX es todo exactamente igual: en ambos casos la petición se envía del todo, o no se llega, etc.

Una forma de minimizar estos problemas, es hacer que los formularios apunten a un script (un control) que realice las tareas, y luego de realizarlas vuelva a la página de origen con un header("Location: ..."); De esta forma al menos al apretar "recargar" no se envían por accidente los mismos datos.

Todo lo demás hay que implementarlo programando!

Saludos cordiales Pedro

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta