desenv-web-rp.com

Como lidar com vários formulários de etapa em que um dos formulários não é enviado

Digamos que você tenha um processo de envio que exija dois formulários. O envio do 2º formulário aciona um email. O que você faz se o segundo formulário não for enviado? Digamos que o usuário esqueça ou fecha a janela por acidente.

Minha única solução foi atualizar o banco de dados com uma bandeira do envio do 1º formulário que identifica que um email não foi enviado. O envio do 2º formulário acionará um evento para enviar um email e atualizar o banco de dados com um sinalizador que identifica que um email foi enviado. Um trabalho cron será executado periodicamente para verificar se há sinalizadores para e-mails não enviados, reunir as informações e enviar um e-mail.

Essa é a melhor maneira de lidar com o problema?

Obrigado.

Editar: Clareza

Formulário 1 O usuário envia dados gerais

Mensagem 1 O usuário apresentou uma opção. O usuário precisa escolher "aprovar" ou "aceitar". Se o usuário enviar o formulário "aceitar" (Formulário 2), um email será enviado. Se o usuário enviar o formulário "aprovado" (Formulário 2), ele receberá outra mensagem com outra opção (Formulário 3). Se o usuário não fizer nada, a última opção fornecida é a opção padrão, mas nesse momento ainda é necessário enviar um email.

Espero que seja mais claro.

2
user334

Como o HTTP é sem estado, a única maneira de rastrear se um usuário enviou o primeiro formulário depois que o navegador foi fechado é usando um mecanismo de persistência (por exemplo, um banco de dados), exatamente como você fez.

No entanto, você pode ter um problema se os usuários enviarem o primeiro formulário e a tarefa cron for executada antes que eles possam enviar o segundo formulário. Você também pode verificar se um certo período de tempo também passou.

Teoricamente, você também pode tentar detectar quando o navegador está fechando e usar esse evento para disparar uma ação, mas eu aconselho fortemente contra ele.

0
Andy West

Depende de por que você está preocupado com isso.

Se sua preocupação é ter dados incompletos no seu banco de dados, sugiro apenas manter os dados inseridos na sessão do usuário até que o usuário preencha o segundo formulário, atualize o banco de dados e envie o e-mail. Se o usuário não se incomodar em preencher o segundo formulário, toda a troca será esquecida assim que a sessão expirar.

Se sua preocupação é com os usuários que não percebem que precisam preencher o segundo formulário, você deve fortemente considerar a possibilidade de redesenhar os formulários (possivelmente mesclá-los). Este é um problema da interface do usuário.

Ter um sinalizador (como discutido na pergunta) pode ajudar a identificar se isso acontece, mas ele não informa se está acontecendo por erro do usuário ou simplesmente porque o usuário perdeu o interesse (a menos que você tenha algum tipo de público cativo).

Uma alternativa: se você puder se conectar quando a sessão de um usuário expirar (isso é bastante simples com sites Java], não estou familiarizado com esse recurso em outras tecnologias do lado do servidor), você poderá verificar se há transações incompletas. ponto.

1
Kris

Conforme você descreve, você deve ter um state do processo em seu banco de dados para identificar quais etapas foram concluídas.

Agora, o próximo passo depende da tecnologia usada.

Para ASP/ASP.NET, há um evento acionado ( no lado do servidor ) quando a sessão expira e, capturando-o, você pode execute a limpeza/conclusão automática do procedimento.

Não tenho certeza se isso é possível em ambientes PHP _ .. suponho que você possa armazenar um carimbo de data/hora assim que a 1ª etapa for concluída e um trabalho cron for executado periodicamente mas verifique primeiro com o carimbo de data/hora = para verificar se já passou algum tempo antes do preenchimento automático.

0
Gabriele Petrioli