it-swarm.it

Come gestire moduli a più passaggi in cui uno dei moduli non viene inviato

Supponi di avere una procedura di invio che richiede due moduli. L'invio del secondo modulo attiva una e-mail. Cosa fai se il secondo modulo non viene inviato? Di 'che l'utente dimentica o chiude la finestra per caso.

La mia unica soluzione era aggiornare il DB con un flag dall'invio del primo modulo che identifica che non è stata inviata una e-mail. L'invio del secondo modulo attiverà un evento per inviare un'e-mail e aggiornare il DB con un flag che identifica che è stata inviata un'e-mail. Un cron job verrà eseguito periodicamente per verificare l'eventuale presenza di flag per e-mail non inviate, raccogliere le informazioni e inviare un'e-mail.

È questo il modo migliore di affrontare il problema?

Grazie.

Modifica: Chiarezza

Modulo 1 L'utente invia i dati generali

Messaggio 1 Utente presentato con una scelta. L'utente deve scegliere di "passare" o "accettare". Se l'utente invia il modulo "accetta" (modulo 2), viene inviata un'e-mail. Se l'utente invia il modulo "passa" (Modulo 2), viene presentato con un altro messaggio con un'altra scelta (Modulo 3). Se l'utente non fa nulla, l'ultima scelta fornita è quella predefinita, ma a questo punto è ancora necessario inviare un'e-mail.

Spero sia più chiaro.

2
user334

Poiché HTTP è senza stato, l'unico modo per tenere traccia del fatto che un utente abbia inviato il primo modulo una volta chiuso il browser è utilizzare un meccanismo di persistenza (ad esempio un database) proprio come è stato fatto.

Tuttavia, potresti riscontrare un problema se gli utenti inviano il primo modulo e il processo cron viene eseguito prima che abbiano la possibilità di inviare il secondo modulo. Puoi anche verificare che sia trascorso un certo periodo di tempo.

Teoricamente potresti anche provare a rilevare quando il browser si sta chiudendo e usare quell'evento per attivare un'azione, ma sconsiglio fortemente di non farlo.

0
Andy West

Dipende dal motivo per cui sei preoccupato per questo.

Se la tua preoccupazione riguarda la presenza di dati incompleti nel tuo DB, ti suggerirei semplicemente di conservare i dati inseriti nella sessione utente fino a quando l'utente non completa il secondo modulo, quindi aggiorna il DB e invia l'e-mail. Se l'utente non si preoccupa di compilare il secondo modulo, l'intero scambio verrà dimenticato una volta scaduta la sessione.

Se la tua preoccupazione riguarda gli utenti che non riescono a rendersi conto che devono compilare il secondo modulo, dovresti fortemente prendere in considerazione la riprogettazione dei moduli (possibilmente unificandoli). Questo è un problema di interfaccia utente.

Avere una bandiera (come discusso in questione) potrebbe aiutare a identificare se ciò accade, ma non ti dirà se sta accadendo a causa di un errore dell'utente o semplicemente perché l'utente ha perso interesse (a meno che tu non abbia un pubblico in cattività di qualche tipo).

Un'alternativa, se riesci ad agganciarti quando scade la sessione di un utente (questo è abbastanza semplice con Java siti, non ho familiarità con questa funzionalità in altre tecnologie lato server) puoi verificare la presenza di transazioni incomplete in quel punto.

1
Kris

Come descrivi, dovresti avere un state del processo nel tuo database per identificare quali passaggi sono stati completati.

Ora, il passaggio successivo dipende dalla tecnologia utilizzata.

Per ASP/ASP.NET c'è un evento attivato ( lato server ) quando la sessione scade e catturandolo puoi eseguire la pulizia/completamento automatico della procedura.

Non sono sicuro che ciò sia possibile in PHP ambienti però .. suppongo che potresti memorizzare un timestamp una volta completato il primo passo e un cron job verrà periodicamente eseguito ma prima controlla contro il timestamp = per vedere se è trascorso un determinato periodo di tempo prima del completamento automatico ..

0