Managed Server
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: xtc_db_error braucht xtc_php_mail, fehlt aber in /admin/includes/application_top

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Hi :-)
    Gibt es eigentlich einen Grund, warum die xtc_php_mail und die PHPMailer-Klasse in der admin/includes/application_top.php nicht inkludiert wird? Für die xtc_db_error-function ist sie ja nötig, aber wenn ich in einem admin-Script nur die application_top einbinde gibt es (natürlich) einen Fehler wegen der fehlenden Email-Funktion (Natürlich nur, wenn ein MySQL-Fehler auftritt) und jedes Script mit Datenbankzugriff muss selbstständig die Email-Dateien inkludieren.

    Via:

    Code: PHP  [Auswählen]
    require_once (DIR_FS_CATALOG.DIR_WS_CLASSES.'class.phpmailer.php');
    require_once (DIR_FS_INC.'xtc_php_mail.inc.php');

    Siehe bspw. "/admin/orders.php".

    Lg
    Fakrae

    Linkback: https://www.modified-shop.org/forum/index.php?topic=34109.0
    Werbung / Banner buchen

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Die von dir beschriebene Problematik kann aber nur eintreten, wenn in Konfiguration -> E-Mail Optionen -> SQL Fehlermeldungen als E-Mail versenden auf 'true' steht. Diese Einstellmöglichkeit ist eigentlich dazu gedacht den Admin per E-Mail zu informieren, wenn im Shop-Frontend  ein Datenbankfehler auftritt, im Shop-Backend, denke ich, ist dies aber nicht nötig da der Fehler direkt dem Admin angezeigt wird, deshalb wäre mein ungetester Vorschlag diesbezüglich folgender.

    In inc/xtc_db_error.inc.php folgenden Code

    Code: PHP  [Auswählen]
        // Deliver 503 Error on database error (so crawlers won't index the error page)
        if (!defined('DIR_FS_ADMIN')) {
          header("HTTP/1.1 503 Service Temporarily Unavailable");
          header("Status: 503 Service Temporarily Unavailable");
          header("Connection: Close");
        }
       
        // Send an email to the shop owner if a sql error occurs
        if (defined('EMAIL_SQL_ERRORS') && EMAIL_SQL_ERRORS == 'true') {    
          $subject = 'DATA BASE ERROR AT - ' . STORE_NAME;
          $message = '<font color="#000000"><strong>' . $errno . ' - ' . $error . '<br /><br />' . $query . '<br /><br />Request URL: ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'].'<br /><br /><small><font color="#ff0000">[XT SQL Error]</font></small><br /><br /></strong></font>';
          xtc_php_mail(STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, '', '', STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, '', '', $subject, nl2br($message), $message);
        }

    ersetzen mit

    Code: PHP  [Auswählen]
        // Deliver 503 Error on database error (so crawlers won't index the error page)
        if (!defined('DIR_FS_ADMIN')) {
          header("HTTP/1.1 503 Service Temporarily Unavailable");
          header("Status: 503 Service Temporarily Unavailable");
          header("Connection: Close");
       
          // Send an email to the shop owner if a sql error occurs
          if (defined('EMAIL_SQL_ERRORS') && EMAIL_SQL_ERRORS == 'true') {    
            $subject = 'DATA BASE ERROR AT - ' . STORE_NAME;
            $message = '<font color="#000000"><strong>' . $errno . ' - ' . $error . '<br /><br />' . $query . '<br /><br />Request URL: ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'].'<br /><br /><small><font color="#ff0000">[XT SQL Error]</font></small><br /><br /></strong></font>';
            xtc_php_mail(STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS, '', '', STORE_OWNER_EMAIL_ADDRESS, STORE_OWNER, '', '', $subject, nl2br($message), $message);
          }
        }

    Möchtest Du aber dennoch deinen Vorschlag implementieren, dann solltest du in admin/includes/application_top.php zusätzlich zu deinem noch folgenden Code einfügen.

    Code: PHP  [Auswählen]
    if (EMAIL_TRANSPORT == 'smtp') {
      require_once (DIR_WS_CLASSES.'class.smtp.php');
    }

    Gruss
    Hanspeter

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Das ist auch eine Möglichkeit, ja.
    Aber so wie es im Augenblick ist, passiert folgendes:
    Es tritt ein Fehler auf, aber anstatt den Fehler anzuzeigen gibt es die Fehlermeldung, dass die Email-Funktion fehlt - aber keine Information über den MySQL-Fehler.

    Wobei ich persönlich die Email-Funktion nützlich finde, wenn auch Menschen ohne Programmierkenntnisse das Backend bedienen... Meine Erfahrung ist nämlich:
    Anwender: "Da war ein Fehler"
    Ich: "Ja, welcher denn?"
    Anwender: "Keine Ahnung, hab ihn weg geklickt, davon verstehe ich sowieso nichts"

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    [...]
    Wobei ich persönlich die Email-Funktion nützlich finde, wenn auch Menschen ohne Programmierkenntnisse das Backend bedienen... Meine Erfahrung ist nämlich:
    Anwender: "Da war ein Fehler"
    Ich: "Ja, welcher denn?"
    Anwender: "Keine Ahnung, hab ihn weg geklickt, davon verstehe ich sowieso nichts"

    Ja das stimmt natürlich, daran habe ich gar nicht gedacht.

    Nachtrag zu meinem letzten Beitrag, das explizite einbinden der Datei 'class.smtp.php' ist nicht nötig, denn in der Datei 'class.phpmailer.php' wird sie bei bedarf automatisch eingebunden und es dürfte wohl so sein das der folgende Code in der 'includes/application_top.php', von der ich es übernommen habe, dort auch überflüssig ist.

    Code: PHP  [Auswählen]
    if (EMAIL_TRANSPORT == 'smtp') {
      require_once (DIR_WS_CLASSES.'class.smtp.php');
    }

    Gruss
    Hanspeter

    webald

    • modified Team
    • Beiträge: 2.791
    und ohne DB-Verbindung wird gar nix gemailt, da die Emal des Aadmin aus der DB gelesen werden muss (https://trac.modified-shop.org/ticket/357)

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Das ist schon richtig, aber was ist wenn es einen DB-Fehler gibt, obwohl die Datenbank selbst verfügbar ist (ich persönlich vergesse bspw. gerne mal das eine oder andere Leerzeichen beim Zusammenbasteln von SQL-Abfragen mit PHP-Variablen) - oder ein anderer Fehler auftritt? Dann habe ich zwar meine Emailadresse und einen Fehler den ich mailen will aber keine Mailfunktion um das auch zu tun.

    webald

    • modified Team
    • Beiträge: 2.791
    Die Mail an den Admin soll doch dann genutzt werden, wenn ein Fehler während dem normalen Betrieb auftritt, damit dieser ggf. schnell behoben wird. Ein nicht erreichbarer mysql-Server wird aber derzeit nicht berücksichtigt (siehe Ticket 357).

    Fehlerhafte SQL-Query gehören mit oder ohne Mail-Versand an den Admin in einem Error-Log gespeichert. Da kann/sollte dann der Webmaster, Admin oder Entwickler dann nachsehen. Auch etwas, das mit 2.0 verbessert wurde.
    3 Antworten
    2494 Aufrufe
    15. Juli 2016, 17:09:26 von Bonsai
    6 Antworten
    7243 Aufrufe
    16. April 2011, 16:39:44 von Tomcraft
               
    anything