it-swarm-id.com

Cara menangani beberapa langkah formulir di mana salah satu formulir tidak dikirimkan

Katakanlah Anda memiliki proses pengiriman yang membutuhkan dua formulir. Pengajuan formulir ke-2 memicu email. Apa yang Anda lakukan jika formulir kedua tidak dikirimkan? Katakanlah pengguna lupa atau menutup jendela secara tidak sengaja.

Satu-satunya solusi saya adalah memperbarui DB dengan bendera dari penyerahan formulir 1 yang mengidentifikasi email belum dikirim. Pengajuan formulir ke-2 akan memicu suatu peristiwa untuk mengirim email dan memperbarui DB dengan bendera yang mengidentifikasi email telah dikirim. Pekerjaan cron akan berjalan secara berkala untuk memeriksa tanda-tanda untuk email yang tidak terkirim, mengumpulkan informasi, dan mengirim email.

Apakah ini cara terbaik untuk mengatasi masalah ini?

Terima kasih.

Edit: Kejelasan

Formulir 1 Pengguna mengirimkan data umum

Pesan 1 Pengguna disajikan dengan pilihan. Pengguna harus memilih untuk "lulus" atau "menerima". Jika pengguna mengirimkan formulir "terima" (Formulir 2), sebuah email dikirim. Jika pengguna mengirimkan formulir "lulus" (Formulir 2), mereka disajikan dengan pesan lain dengan pilihan lain (Formulir 3). Jika pengguna tidak melakukan apa-apa, pilihan terakhir yang disediakan adalah pilihan default mereka, tetapi pada saat ini email masih perlu dikirim.

Saya harap itu lebih jelas.

2
user334

Karena HTTP tidak memiliki kewarganegaraan, satu-satunya cara untuk melacak apakah pengguna telah mengirimkan formulir pertama setelah browser ditutup adalah dengan menggunakan mekanisme kegigihan (mis., Basis data) seperti yang telah Anda lakukan.

Namun, Anda mungkin mengalami masalah jika pengguna mengirimkan formulir pertama dan pekerjaan cron berjalan sebelum mereka memiliki kesempatan untuk mengirimkan formulir kedua. Anda mungkin ingin juga memeriksa bahwa sejumlah waktu juga telah berlalu.

Secara teoritis Anda juga bisa mencoba mendeteksi ketika browser ditutup dan menggunakan acara itu untuk memicu tindakan, tapi saya menyarankan sangat menentangnya.

0
Andy West

Itu tergantung pada mengapa Anda khawatir tentang ini.

Jika kekhawatiran Anda tentang memiliki data yang tidak lengkap di dalam diri Anda, DB Saya sarankan hanya menyimpan data yang dimasukkan dalam sesi pengguna sampai pengguna mengisi formulir kedua dan kemudian memperbarui DB dan mengirim email. Jika pengguna tidak repot-repot mengisi formulir kedua, maka seluruh pertukaran akan dilupakan begitu sesi habis.

Jika kekhawatiran Anda tentang pengguna gagal menyadari bahwa mereka harus mengisi formulir kedua Anda harus sangat pertimbangkan untuk mendesain ulang formulir (mungkin menggabungkan mereka). Ini adalah masalah antarmuka pengguna.

Memiliki bendera (seperti yang dibahas dalam pertanyaan) dapat membantu mengidentifikasi jika ini terjadi, tetapi tidak akan memberi tahu Anda jika itu terjadi karena kesalahan pengguna atau hanya karena pengguna kehilangan minat (kecuali jika Anda memiliki beberapa jenis pendengar).

Alternatif, jika Anda dapat terhubung ke dalam ketika sesi pengguna berakhir (ini cukup sederhana dengan Java situs, saya tidak terbiasa dengan fitur ini dalam teknologi sisi server lain) Anda dapat memeriksa untuk transaksi yang tidak lengkap pada saat itu titik.

1
Kris

SEBAGAIMANA Anda jelaskan, Anda harus memiliki state dari proses di basis data Anda untuk mengidentifikasi langkah-langkah mana yang telah selesai ..

Sekarang, langkah selanjutnya tergantung pada teknologi yang digunakan ..

Untuk ASP/ASP.NET ada peristiwa yang dipicu ( sisi server ) ketika sesi berakhir, dan menangkapnya Anda dapat melakukan pembersihan/penyelesaian otomatis prosedur ..

Tidak yakin apakah ini mungkin di lingkungan PHP .. saya kira Anda bisa menyimpan stempel waktu setelah langkah pertama selesai dan pekerjaan cron akan berjalan secara berkala tapi periksa dulu melawan stempel wakt = untuk melihat apakah sejumlah waktu telah berlalu sebelum pelengkapan otomatis ..

0