durch reload Mail mehrfach versendet

Thema wurde von kinemore, 8. Oktober 2014 erstellt.

  1. kinemore
    kinemore Erfahrener Benutzer
    Registriert seit:
    24. April 2014
    Beiträge:
    58
    Danke erhalten:
    0
    Danke vergeben:
    3
    Guten Morgen,


    leider mußte ich gestern feststellen, daß mein Shop ein gravierendes Problem aufweißt.
    Vorgeschichte:
    Ich mußte für meinen Shop die "CheckoutSuccessExtenderComponent" so anpassen, daß nach erfolgreichem Kauf eine weitere Mail mit zusätzlichen Daten an den Kunden versendet wird. Dies funktioniert auch ohne Probleme.

    Problem:
    Wenn ich nach erfolgreichem Kauf die checkout_success.php angezeigt bekomme, wird wie gewünscht die Mail verschickt. Führe ich einen Reload der Seite durch (durch Drücken von F5) wird die Mail fälschlicher Weise erneut versendet !
    Wie kann ich das unterbinden ?

    Vielen Dank für die Hilfe im Voraus !



    PS: das Problem ist mir erst seit dem UpDate auf 2.1.x.x aufgefallen. Wenn ich micht richtig erinnere ... hatte ich unter 2.0.14 , nach der Implementierung der Mail-Funktion, mehrfach den Reload mit F5 getestet und die Mail wurde wie gewünscht nur einmal versendet. Vllt. spielt mir aber auch mein Gedächtnis einen Streich ... :confused:
     
  2. Anonymous
    Anonymous Erfahrener Benutzer
    Mitarbeiter
    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.749
    Danke vergeben:
    137
    Hallo,

    ich würde im CheckoutSuccessExtender einfach in $_SESSION vermerken, dass die E-Mail schon raus ist.
     
  3. Manni_HB
    Manni_HB G-WARD 2012/13/14/15
    Registriert seit:
    26. April 2011
    Beiträge:
    9.098
    Danke erhalten:
    1.540
    Danke vergeben:
    909
    Ort:
    Bremen
    Wobei die Frage erlaubt sei:

    1. Wer macht so was?
    2. Wen juckt es - wenn der SpaßUser Freunde daran hat?
     
  4. kinemore
    kinemore Erfahrener Benutzer
    Registriert seit:
    24. April 2014
    Beiträge:
    58
    Danke erhalten:
    0
    Danke vergeben:
    3
    Das Problem ist bei der Sache weniger die Anzahl der Mails als der Inhalt. Bei jedem Mailabruf wird ein Ticket generiert ...

    @Marco, leider sind meine Kenntnisse im Bereich von php nicht sehr fundiert ...
    wie verwende ich denn $_SESSION in Verbindung mit
    mail( $emailadr, $betreff2, $mailtext2, $header);
     
  5. Anonymous
    Anonymous Erfahrener Benutzer
    Mitarbeiter
    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.749
    Danke vergeben:
    137
    In schnellem Pseudocode:

    PHP:
    if(!isset($_SESSION['my_csextd_mail_sent']) || $_SESSION['my_csextd_mail_sent'] != $this->v_data_array['orders_id'])
    {
      
    mail($addr$subj$body$header);
      
    $_SESSION['my_csextd_mail_sent'] = $this->v_data_array['orders_id'];
    }
     
  6. kinemore
    kinemore Erfahrener Benutzer
    Registriert seit:
    24. April 2014
    Beiträge:
    58
    Danke erhalten:
    0
    Danke vergeben:
    3
    #6 kinemore, 8. Oktober 2014
    Zuletzt bearbeitet: 8. Oktober 2014
    Vielen Dank für deine schnelle Antwort. Ein paar Fragen hätte ich noch ...

    session_start(); schreibe ich ganz am Anfang. Meine Variablen lese ich noch vor der "IF"-Anweisung aus ? Oder kann ich das alles in das "IF" mit reinschreiben?

    PS: ist die Variable für die Session die Orders_ID ? Diese ändert sich doch bei einem reload nicht ? oder ??
     
  7. Anonymous
    Anonymous Erfahrener Benutzer
    Mitarbeiter
    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.749
    Danke vergeben:
    137
    Hallo,

    session_start() musst du in einem CheckoutSuccessExtender nicht aufrufen, die Shop-Session läuft an der Stelle schon lange. Ansonsten kann wohl alles, was du da zu erledigen hast, in den if-Block rein, ja.

    Die orders_id in $this->v_data_array['orders_id'] bleibt bei Reloads der Seite konstant. Nur, wenn man in derselben Session eine weitere Bestellung aufgibt, kommt es zu einer neuen orders_id.
     
  8. kinemore
    kinemore Erfahrener Benutzer
    Registriert seit:
    24. April 2014
    Beiträge:
    58
    Danke erhalten:
    0
    Danke vergeben:
    3
    #8 kinemore, 8. Oktober 2014
    Zuletzt bearbeitet: 9. Oktober 2014
    Nach "meiner" Umsetzung erhalte ich leider folgende Fehlermeldung:

    PARSE ERROR(4): "syntax error, unexpected '}'"Information:
    Parse error: syntax error, unexpected '}' in C:\inetpub\wwwroot\tiSys\system\extender\CheckoutSuccessExtenderComponent.inc.php on line 189


    Nach dem Entfernen der Klammer bzw. kompletter neuen Implementierung des Ansatzes folgt folgende Fehlermeldung:

    Fatal error: Call to undefined method YoochooseCheckoutSuccessExtender::get_html_output_array() in C:\inetpub\wwwroot\tiSys\system\classes\checkout\CheckoutSuccessContentControl.inc.php on line 70

    FATAL ERROR(1): "Call to undefined method YoochooseCheckoutSuccessExtender::get_html_output_array()"
     
  9. Anonymous
    Anonymous Erfahrener Benutzer
    Mitarbeiter
    Registriert seit:
    22. Juni 2011
    Beiträge:
    4.760
    Danke erhalten:
    1.749
    Danke vergeben:
    137
    Hallo,

    da bin ich jetzt raus, das kann ich nicht mehr ferndiagnostizieren, da scheint irgendwas durcheinander zu gehen.
     
  10. kinemore
    kinemore Erfahrener Benutzer
    Registriert seit:
    24. April 2014
    Beiträge:
    58
    Danke erhalten:
    0
    Danke vergeben:
    3
    Hallo Marco,

    die Ursache für das Problem war vermutlich ein Fehler in einer Pfandangabe bei einer fopen + fwrite Anweisung.
    Ich habe diese mal auskommentiert und bekomme jetzt keine Fehlermeldung mehr !