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 ...
Hallo, ich würde im CheckoutSuccessExtender einfach in $_SESSION vermerken, dass die E-Mail schon raus ist.
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);
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'];}
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 ??
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.
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()"
Hallo, da bin ich jetzt raus, das kann ich nicht mehr ferndiagnostizieren, da scheint irgendwas durcheinander zu gehen.
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 !