web-dev-qa-db-ja.com

フォームの1つが送信されない複数のステップフォームを処理する方法

2つのフォームを必要とする送信プロセスがあるとします。 2番目のフォームを送信すると、電子メールがトリガーされます。 2番目のフォームが送信されない場合はどうしますか?ユーザーが誤ってウィンドウを忘れたり閉じたりしたとします。

私の唯一の解決策は、電子メールが送信されていないことを識別する最初のフォームの送信からのフラグでDBを更新することでした。 2番目のフォームを送信すると、イベントがトリガーされ、メールが送信され、メールが送信されたことを示すフラグでDBが更新されます。 cronジョブは定期的に実行され、未送信の電子メールのフラグをチェックし、情報を収集して、電子メールを送信します。

これが問題に対処する最良の方法ですか?

ありがとう。

編集:明瞭度

フォーム1ユーザーが一般データを送信します

メッセージ1ユーザーに選択肢が提示されました。ユーザーは「合格」または「受け入れる」を選択する必要があります。ユーザーが「accept」フォーム(フォーム2)を送信すると、電子メールが送信されます。ユーザーが「パス」フォーム(フォーム2)を送信すると、別の選択肢(フォーム3)を含む別のメッセージが表示されます。ユーザーが何もしない場合、提供される最後の選択肢はデフォルトの選択肢ですが、この時点ではまだ電子メールを送信する必要があります。

それがより明確であることを願っています。

2
user334

HTTPはステートレスであるため、ブラウザーが閉じられた後にユーザーが最初のフォームを送信したかどうかを追跡する唯一の方法は、永続メカニズム(データベースなど)を使用することです。

ただし、ユーザーが最初のフォームを送信し、cronジョブが2番目のフォームを送信する前に実行されると、問題が発生する可能性があります。また、一定の時間が経過したことを確認することもできます。

理論的には、ブラウザが閉じていることを検出し、そのイベントを使用してアクションをトリガーすることもできますが、stronglyに対してアドバイスします。

0
Andy West

これを心配する理由によります。

DBに不完全なデータがあるという懸念がある場合は、ユーザーが2番目のフォームを完了し、DBを更新して電子メールを送信するまで、入力されたデータをユーザーセッションに保持することをお勧めします。ユーザーが2番目のフォームに入力する必要がない場合、セッションがタイムアウトすると交換全体が忘れられます。

ユーザーが2番目のフォームに記入する必要があることに気づかないという懸念がある場合は、強くフォームの再設計(おそらくマージ)を検討する必要があります。これはユーザーインターフェイスの問題です。

フラグ(問題で説明されている)があると、これが発生するかどうかを特定するのに役立ちますが、ユーザーエラーによって発生したのか、単にユーザーが興味を失ったために発生したのかを特定することはできません(何らかの視聴者がいない限り)。

別の方法として、ユーザーのセッションの有効期限が切れたときにフックできる場合(これはJavaサイトでは非常に簡単です。他のサーバーサイドテクノロジーのこの機能に精通していません)、その時点で不完全なトランザクションをチェックできますポイント。

1
Kris

説明したように、完了したステップを識別するために、データベースにプロセスのstateが必要です。

さて、次のステップは使用する技術に依存します。

ASP/ASP.NETの場合、セッションの有効期限が切れたときにトリガーされるイベント(server-side)があり、それをキャッチできます手順のクリーンアップ/自動完了を実行します。

PHP環境でこれが可能かどうかはわかりませんが、最初のステップが完了し、cronジョブが定期的に実行されると、タイムスタンプを保存できると思いますただし、最初にタイムスタンプをチェックします =オートコンプリートの前に一定の時間が経過したかどうかを確認するために..

0