Diyelim ki iki form gerektiren bir başvuru süreciniz var. 2. formun teslimi bir e-postayı tetikler. İkinci form gönderilmezse ne yaparsınız? Kullanıcının yanlışlıkla pencereyi unuttuğunu veya kapattığını söyleyin.
Tek çözümüm, bir e-postanın gönderilmediğini belirten 1. formun sunulmasından bir bayrakla DB'yi güncellemekti. 2. formun gönderilmesi, bir e-posta göndermek için bir olayı tetikler ve DB'yi bir e-postanın gönderildiğini tanımlayan bir bayrakla günceller. Gönderilmeyen e-postaların bayraklarını kontrol etmek, bilgileri toplamak ve bir e-posta göndermek için bir cron işi periyodik olarak çalışacaktır.
Bu sorunla başa çıkmanın en iyi yolu mu?
Teşekkürler.
Düzenleme: Netlik
Form 1 Kullanıcı genel verileri gönderir
Mesaj 1 Kullanıcı bir seçenek sundu. Kullanıcının "geçmesi" veya "kabul et" seçeneğini seçmesi gerekir. Kullanıcı "kabul et" formunu gönderirse (Form 2), bir e-posta gönderilir. Kullanıcı "pass" formunu (Form 2) gönderirse, başka bir seçenekle başka bir mesajla sunulur (Form 3). Kullanıcı hiçbir şey yapmazsa, verilen son seçenek varsayılan tercihleridir, ancak bu noktada bir e-postanın hala gönderilmesi gerekir.
Umarım daha açıktır.
HTTP durumsuz olduğundan, tarayıcı kapatıldıktan sonra bir kullanıcının ilk formu gönderip göndermediğini izlemenin tek yolu, tıpkı sizin yaptığınız gibi bir kalıcılık mekanizması kullanmaktır.
Ancak, kullanıcılar ilk formu gönderirse ve cron işi ikinci formu gönderme şansına sahip olmadan önce çalışırsa, bir sorunla karşılaşabilirsiniz. Ayrıca belirli bir zamanın geçtiğini de kontrol etmek isteyebilirsiniz.
Teorik olarak, tarayıcının ne zaman kapandığını tespit etmeye ve bir eylemi tetiklemek için bu olayı kullanmaya da çalışabilirsiniz, ancak şunu öneririm kesinlikle buna karşı.
Bu konuda neden endişelendiğinize bağlı.
Endişeniz, DB'nin içinde eksik veri bulunmasıyla ilgili ise, kullanıcı ikinci formu tamamlayana kadar girilen verileri kullanıcı oturumunda tutmanızı ve ardından DB'yi güncelleyip e-postayı göndermenizi öneririm. Kullanıcı ikinci formu doldurmada zahmete girmezse, oturumu sona erdiğinde alışverişin tamamı unutulur.
Endişeniz, kullanıcıları ikinci formu doldurmaları gerektiğinin farkına varmamışsa, yapmanız gereken kesinlikle formları yeniden tasarlamayı düşünmelisiniz (muhtemelen birleştirme). Bu bir kullanıcı arayüzü sorunudur.
Bir bayrak (söz konusu tartışıldığı gibi) olması, bunun gerçekleşip gerçekleşmeyeceğini belirlemeye yardımcı olabilir, ancak kullanıcı hatası nedeniyle mi yoksa kullanıcının ilgisini kaybettiği için (bir tür tutsak kitleniz olmadıkça) size söylemez.
Alternatif olarak, bir kullanıcının oturumu sona erdiğinde bağlantı kurabilirsiniz (bu, Java sitelerle oldukça basittir, diğer sunucu tarafı teknolojilerinde bu özelliğe aşina değilim) buradaki eksik işlemleri kontrol edebilirsiniz. puan.
Tanımladığınız gibi, hangi adımların tamamlandığını belirlemek için veritabanınızdaki işlemin
state'sine sahip olmalısınız.
Şimdi, bir sonraki adım kullanılan teknolojiye bağlı.
ASP/ASP.NET için oturumun süresi dolduğunda tetiklenen bir olay var ( sunucu tarafı ); prosedürü temizleme/otomatik tamamlama işlemini uygulayın ..
Ancak, PHP ortamlarında bunun mümkün olup olmadığından emin değilim. Sanırım 1. adım tamamlandığında bir zaman damgasını saklayabildiğinizi ve bir cron işinin düzenli aralıklarla çalışacağını varsayalım ancak önce zaman damgasını kontrol edin = otomatik tamamlamadan önce belirli bir süre geçip geçmediğini görmek için ..