it-swarm-es.com

Cómo lidiar con formularios de pasos múltiples donde uno de los formularios no se envía

Digamos que tiene un proceso de envío que requiere dos formas. El envío del segundo formulario activa un correo electrónico. ¿Qué haces si no se envía el segundo formulario? Digamos que el usuario olvida o cierra la ventana por accidente.

Mi única solución fue actualizar la base de datos con una marca desde el envío del primer formulario que identifica que no se ha enviado un correo electrónico. La presentación del segundo formulario activará un evento para enviar un correo electrónico y actualizará la base de datos con una bandera que identifica que se ha enviado un correo electrónico. Se ejecutará periódicamente un trabajo cron para verificar si hay marcas para correos electrónicos no enviados, recopilar la información y enviar un correo electrónico.

¿Es esta la mejor forma de abordar el problema?

Gracias.

Editar: Claridad

Formulario 1 El usuario envía datos generales

Mensaje 1 Usuario presentado con una opción. El usuario debe elegir "pasar" o "aceptar". Si el usuario envía el formulario "aceptar" (Formulario 2), se envía un correo electrónico. Si el usuario envía el formulario de "aprobación" (Formulario 2), se le presentará otro mensaje con otra opción (Formulario 3). Si el usuario no hace nada, la última opción proporcionada es su opción predeterminada, pero en este punto todavía se necesita enviar un correo electrónico.

Espero que sea más claro.

2
user334

Dado que HTTP no tiene estado, la única forma de rastrear si un usuario ha enviado el primer formulario una vez que se cierra el navegador es mediante un mecanismo de persistencia (por ejemplo, una base de datos) tal como lo ha hecho.

Sin embargo, puede encontrarse con un problema si los usuarios envían el primer formulario y el trabajo cron se ejecuta antes de que tengan la oportunidad de enviar el segundo formulario. Es posible que también desee verificar que también haya pasado cierto tiempo.

Teóricamente, también podría intentar detectar cuándo se está cerrando el navegador y usar ese evento para desencadenar una acción, pero le recomiendo fuertemente en contra.

0
Andy West

Depende de por qué estás preocupado por esto.

Si su preocupación es tener datos incompletos en su base de datos, sugeriría simplemente mantener los datos ingresados ​​en la sesión del usuario hasta que el usuario complete el segundo formulario y luego actualice la base de datos y envíe el correo electrónico. Si el usuario no se molesta en completar el segundo formulario, se olvidará todo el intercambio una vez que finalice su sesión.

Si le preocupa que los usuarios no se den cuenta de que necesitan completar el segundo formulario, debería fuertemente considerar rediseñar los formularios (posiblemente fusionarlos). Este es un problema de interfaz de usuario.

Tener una bandera (como se discutió en la pregunta) podría ayudar a identificar si esto sucede, pero no le dirá si está sucediendo por error del usuario o simplemente porque el usuario perdió interés (a menos que tenga una audiencia cautiva de algún tipo).

Una alternativa, si puede conectarse cuando caduque la sesión de un usuario (esto es bastante simple con los sitios Java, no estoy familiarizado con esta característica en otras tecnologías del lado del servidor), puede verificar si hay transacciones incompletas en ese momento punto.

1
Kris

Como usted describe, debe tener un state del proceso en su base de datos para identificar qué pasos se han completado.

Ahora, el siguiente paso depende de la tecnología utilizada.

Para ASP/ASP.NET hay un evento activado ( del lado del servidor ) cuando la sesión caduca, y al capturarlo puede realice la limpieza/finalización automática del procedimiento.

Sin embargo, no estoy seguro de si esto es posible en los entornos PHP .. supongo que podría almacenar una marca de tiempo una vez que se complete el primer paso y se ejecutará periódicamente un trabajo cron pero primero verifique con la marca de tiempo = para ver si ha transcurrido un tiempo determinado antes de que se complete automáticamente ...

0
Gabriele Petrioli