it-swarm-eu.dev

Jak se vypořádat s vícestupňovými formuláři, pokud jeden z formulářů není odeslán

Řekněme, že máte proces odeslání, který vyžaduje dvě formy. Odeslání druhého formuláře spustí e-mail. Co dělat, když druhý formulář není odeslán? Řekněme, že uživatel omylem zapomene nebo zavře okno.

Mým jediným řešením bylo aktualizovat DB příznakem od odeslání 1. formuláře, který identifikuje, že e-mail nebyl odeslán. Odeslání druhého formuláře spustí událost k odeslání e-mailu a aktualizaci DB s příznakem, který identifikuje, že e-mail byl odeslán. Úloha cron se bude pravidelně spouštět, aby se zkontrolovaly případné příznaky neodeslaných e-mailů, shromáždily se informace a poslaly se e-maily.

Je to nejlepší způsob řešení problému?

Dík.

Edit: Clarity

Formulář 1 Uživatel odešle obecné údaje

Zpráva 1 Uživatel předložen s výběrem. Uživatel se musí rozhodnout „projít“ nebo „přijmout“. Pokud uživatel odešle formulář „přijmout“ (formulář 2), odešle se e-mail. Pokud uživatel odešle formulář „pass“ (formulář 2), bude mu předložena jiná zpráva s jinou volbou (formulář 3). Pokud uživatel nic nedělá, poslední volbou je jejich výchozí volba, ale v tomto okamžiku je stále třeba odeslat e-mail.

Doufám, že je to jasnější.

2
user334

Protože HTTP je bez státní příslušnosti, jediným způsobem, jak sledovat, zda uživatel odeslal první formulář po uzavření prohlížeče, je použití mechanismu vytrvalosti (např. Databáze), jako jste to udělali.

Můžete však narazit na problém, pokud uživatelé odešlou první formulář a úloha cron se spustí dříve, než budou mít šanci odeslat druhý formulář. Můžete také zkontrolovat, že uběhlo také určité množství času.

Teoreticky byste se také mohli pokusit zjistit, kdy se prohlížeč zavírá, a použít tuto událost k vyvolání akce, ale radím důrazně proti ní.

0
Andy West

Záleží na tom, proč se tím obáváte.

Pokud se obáváte, že máte v databázi neúplná data, navrhl bych, abyste zadané údaje ponechali v uživatelské relaci, dokud uživatel nedokončí druhý formulář, a poté aktualizujte databázi a odešlete e-mail. Pokud se uživatel neobtěžuje vyplňovat druhý formulář, bude celá výměna zapomenuta, jakmile jeho relace vyprší.

Pokud se zajímáte o to, že si uživatelé neuvědomují, že potřebují vyplnit druhý formulář, měli byste důrazně zvážit přepracování formulářů (možná jejich sloučení). Toto je problém uživatelského rozhraní.

Mít příznak (jak je diskutováno v otázce) by vám mohlo pomoci zjistit, zda se to stane, ale nebude vám říkat, zda se to děje v důsledku chyby uživatele nebo jednoduše proto, že uživatel ztratil zájem (pokud nemáte zajaté publikum nějakého druhu).

Alternativně, pokud se můžete připojit, když vyprší relace uživatele (to je docela jednoduché u Java webů, tuto funkci neznáte v jiných technologiích na straně serveru), můžete zkontrolovat, zda nedochází k neúplným transakcím. směřovat.

1
Kris

Jak popisujete, měli byste mít state procesu v databázi k identifikaci, které kroky byly dokončeny.

Nyní další krok závisí na použité technologii.

Pro ASP/ASP.NET je po vypršení relace spuštěna událost ( na straně serveru ) a její zachycení můžete provést provést čištění/auto-dokončení postupu.

Nejste si jisti, jestli je to možné v prostředích PHP .. Předpokládám, že byste mohli uložit časové razítko, jakmile bude dokončen první krok, a cronová úloha bude periodicky spuštěna ale nejprve zkontrolovat proti timestamp = zjistit, zda před automatickým dokončením uběhlo stanovené množství času.

0