it-swarm.com.de

Umgang mit Formularen mit mehreren Schritten, bei denen eines der Formulare nicht gesendet wird

Angenommen, Sie haben einen Einreichungsprozess, für den zwei Formulare erforderlich sind. Das Absenden des 2. Formulars löst eine E-Mail aus. Was machen Sie, wenn das zweite Formular nicht eingereicht wird? Sagen wir, der Benutzer vergisst oder schließt das Fenster versehentlich.

Meine einzige Lösung bestand darin, die Datenbank mit einem Flag zu aktualisieren, das von der Übermittlung des ersten Formulars stammt und angibt, dass eine E-Mail nicht gesendet wurde. Das Absenden des 2. Formulars löst ein Ereignis zum Senden einer E-Mail aus und aktualisiert die Datenbank mit einem Flag, das angibt, dass eine E-Mail gesendet wurde. Ein Cron-Job wird in regelmäßigen Abständen ausgeführt, um nach Flags für nicht gesendete E-Mails zu suchen, die Informationen zu sammeln und eine E-Mail zu senden.

Ist dies der beste Weg, um mit dem Problem umzugehen?

Vielen Dank.

Bearbeiten: Klarheit

Formular 1 Benutzer gibt allgemeine Daten ein

Nachricht 1 Benutzer hat eine Auswahl getroffen. Der Benutzer muss zwischen "Bestanden" und "Akzeptieren" wählen. Wenn der Benutzer das "Akzeptieren" -Formular (Formular 2) absendet, wird eine E-Mail gesendet. Wenn der Benutzer das Formular "Bestanden" (Formular 2) sendet, wird ihm eine andere Nachricht mit einer anderen Auswahl (Formular 3) angezeigt. Wenn der Benutzer nichts unternimmt, ist die zuletzt angegebene Auswahl die Standardauswahl. Zu diesem Zeitpunkt muss jedoch noch eine E-Mail gesendet werden.

Ich hoffe das ist klarer.

2
user334

Da HTTP zustandslos ist, können Sie nur mithilfe eines Persistenzmechanismus (z. B. einer Datenbank) verfolgen, ob ein Benutzer das erste Formular gesendet hat, nachdem der Browser geschlossen wurde.

Es kann jedoch zu Problemen kommen, wenn Benutzer das erste Formular senden und der Cron-Job ausgeführt wird, bevor sie die Möglichkeit haben, das zweite Formular zu senden. Sie können auch überprüfen, ob eine bestimmte Zeitspanne verstrichen ist.

Theoretisch könnten Sie auch versuchen, festzustellen, wann der Browser geschlossen wird, und dieses Ereignis verwenden, um eine Aktion auszulösen, aber ich rate stark davon ab.

0
Andy West

Es hängt davon ab, warum Sie darüber besorgt sind.

Wenn Sie Bedenken haben, unvollständige Daten in Ihrer Datenbank zu haben, empfehlen wir Ihnen, die eingegebenen Daten in der Benutzersitzung zu belassen, bis der Benutzer das zweite Formular ausgefüllt hat. Aktualisieren Sie dann die Datenbank und senden Sie die E-Mail. Wenn sich der Benutzer nicht darum kümmert, das zweite Formular auszufüllen, wird der gesamte Austausch vergessen, sobald seine Sitzung abgelaufen ist.

Wenn Sie Bedenken haben, dass Benutzer nicht erkennen, dass sie das zweite Formular ausfüllen müssen, sollten Sie nachdrücklich erwägen, die Formulare neu zu gestalten (möglicherweise zusammenzuführen). Dies ist ein Benutzeroberflächenproblem.

Ein Flag (wie in Frage besprochen) könnte dabei helfen, festzustellen, ob dies passiert. Es gibt jedoch keinen Hinweis darauf, ob es sich um einen Benutzerfehler handelt oder nur, weil der Benutzer das Interesse verloren hat (es sei denn, Sie haben eine Art gefangene Zielgruppe).

Eine Alternative: Wenn Sie sich nach Ablauf der Sitzung eines Benutzers anmelden können (dies ist bei Java Sites recht einfach, ich kenne diese Funktion in anderen serverseitigen Technologien nicht), können Sie diesbezüglich prüfen, ob Transaktionen unvollständig sind Punkt.

1
Kris

Wie Sie beschreiben, sollten Sie eine state des Prozesses in Ihrer Datenbank haben, um zu identifizieren, welche Schritte abgeschlossen wurden.

Nun hängt der nächste Schritt von der verwendeten Technologie ab.

Für ASP/ASP.NET gibt es ein Ereignis, das serverseitig ausgelöst wird (), wenn die Sitzung abläuft, und Sie können es abfangen Führen Sie die Bereinigung/automatische Vervollständigung des Vorgangs durch.

Ich bin mir nicht sicher, ob dies in PHP Umgebungen möglich ist. Ich nehme an, Sie könnten einen Zeitstempel speichern, sobald der erste Schritt abgeschlossen ist und ein Cron-Job in regelmäßigen Abständen ausgeführt wird , aber zuerst gegen den prüfen Zeitstempel , um festzustellen, ob eine festgelegte Zeitspanne verstrichen ist, bevor die automatische Vervollständigung durchgeführt wird.

0