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: plötzlicher Fehler doppelter xtdbquery() Aufruf in application_top

    Clever

    • Schreiberling
    • Beiträge: 257
    Hallo
    Wir haben ein seltsames Problem:
    seit ca. 3 Monaten ist unser Shop nahezu unverändert.
    Einzig habe ich die Thumbnails der Produktbilder im Adminbereich eingebaut (und testweise wieder ausgebaut) - aber auch dies war bereits am 06.06.11
    Ich habe im FTP alle Dateien und Ordner nachgesehen ob eine davon NACH dem 06.06.11 verändert wurde.
    Dies ist nicht der Fall (bis auf die admin_stats)
    dennoch bekommen wir seit heute Nacht (und nicht vorher) die Fehlermeldung beim Versuch eine PDF-Rechnung auszudrucken:
    Zitat
    Fatal error: Cannot redeclare xtdbquery() (previously declared in /XXX/admin/includes/application_top.php:349) in XXX/admin/includes/application_top.php on line 357
    Die Suche brachte mich leider nicht weiter - die Anweisung in der Print_order_php in require_once umzuwandeln veränderte den Fehler leider auch nicht - so das nicht zu ersehen ist welche Datei da die Application_top doppelt aufruft ( und da ich kein Modul eingebaut habe...?!?)
    die besagte Zeile 349 bis 357 lautet übrigens:

    Code: PHP  [Auswählen]
       function xtDBquery($query) {
           if (DB_CACHE=='true') {
                 $result=xtc_db_queryCached($query);
                 //echo 'cached query: '.$query.'<br />';
              } else {
                 $result=xtc_db_query($query);
        }
        return $result;
      }
     
    DB Cache ist übrigens OFF ("false").

    hat jemand eine Idee ?
    Danke sehr

    EDIT: Ich habe eben gemerkt, dass der Ausdruck des Lieferscheins KEINE Fehlermeldung erzeugt.
    was mich nun völlig verwirrt, da er auf die gleiche "print_order.php" zugreift wie der Rechnungsdruck:

    Code: PHP  [Auswählen]
    <?

    // PdfRechnung geschrieben von Leonid Lezner. leolezner@yahoo.de
    // Version 1.0

    if(!defined('PDF_LIEFERSCHEIN'))
            define('PDF_LIEFERSCHEIN', false);

    require('includes/application_top.php');
    define('FPDF_FONTPATH', DIR_FS_ADMIN.'PdfBriefe/font/');
    require_once(DIR_FS_INC .'xtc_get_order_data.inc.php');
    require_once(DIR_FS_INC .'xtc_get_attributes_model.inc.php');
    require_once(DIR_FS_INC .'xtc_not_null.inc.php');
    require_once(DIR_FS_INC .'xtc_format_price_order.inc.php');
    require_once (DIR_FS_INC.'xtc_validate_vatid_status.inc.php');
    include(DIR_WS_CLASSES . 'order.php');

    $order = new order($_GET['oID']);

    // Sprache der Rechnung einstellen
    $sprache = $order->info['language'];

    require('PdfBriefe/PdfRechnung.php');

    // Objekte initiallisieren
    $pdf = new PdfRechnung();

    $pdf->Init("Rechnung");
    // Kommentarmodul 21.Mai 2006 History-Werte aus der Tabelle auslesen
    $comments_from_history = "";
    $orders_history_query = xtc_db_query("select orders_status_history_id, comments from ".TABLE_ORDERS_STATUS_HISTORY." where orders_id = '".(int)$_GET['oID']."' order by date_added");

    if (xtc_db_num_rows($orders_history_query)) {
    while ($orders_history = xtc_db_fetch_array($orders_history_query)) {

    // wenn das Kommentarfeld nicht leer und die Ausgabe gewünscht ist. $_GET['status_hist_ + orders_status_history_id] enthällt ID
    if(xtc_db_output($orders_history['comments']) != '' && Isset($_GET['status_hist_'.xtc_db_output($orders_history['orders_status_history_id'])])) {
    $comments_from_history = $comments_from_history.''.(htmlspecialchars($orders_history['comments'])) .'';
    }
    }
    }

    // Kunden ID abfragen
    $order_query_check = xtc_db_query("SELECT customers_id FROM ".TABLE_ORDERS." WHERE orders_id='".(int)$_GET['oID']."'");
    $order_check = xtc_db_fetch_array($order_query_check);
    $customers_id = $order_check['customers_id'];

    $order_query_check = xtc_db_query("SELECT customers_gender FROM ".TABLE_CUSTOMERS." WHERE customers_id='".(int)$customers_id."'");
    $customer_gender = xtc_db_fetch_array($order_query_check);

    //$customers_vat_id = xtc_address_format($order->customer['customers_vat_id'], $order->info['customers_vat_id']);

    $kundenadresse = xtc_address_format($order->customer['format_id'], $order->billing, 1, '', '<br>');

    $customers_vat_id = xtc_address_format($order->customer['vat_id'], $order->billing, 1, '', '<br>');

    // Ausgabe des Adressenfeldes und des Logos
    $pdf->Adresse(str_replace("<br>", "\n", $kundenadresse), TEXT_PDF_SHOPADRESSEKLEIN);
    $pdf->Logo(DIR_FS_CATALOG.'templates/'.CURRENT_TEMPLATE.'/img/logo.png');

    // Datum in das Format tt.mm.jj umwandeln
    preg_match("/(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})/", $order->info['date_purchased'], $dt);
    $date_purchased = time();//mktime($dt[4], $dt[5], $dt[6], $dt[2], $dt[3], $dt[1]);

    // Zahlungsweise abfragen
    if ($order->info['payment_method']!='' && $order->info['payment_method']!='no_payment')
    {
            include(DIR_FS_CATALOG.'lang/'.$sprache.'/modules/payment/'.$order->info['payment_method'].'.php');
            $payment_method = constant(strtoupper('MODULE_PAYMENT_'.$order->info['payment_method'].'_TEXT_TITLE'));
    }

    $order_info_query = xtc_db_query("SELECT bill_nr FROM ".TABLE_ORDERS." WHERE orders_id='".$_GET['oID']."';");
    $order_info_data = xtc_db_fetch_array($order_info_query);
    $order_bill = $order_info_data['bill_nr'];

    $order_query_check = xtc_db_query("SELECT customers_vat_id FROM ".TABLE_ORDERS." WHERE customers_vat_id='".(int)$_GET['costumers_vat_id']."';");
    $orrder_check = xtc_db_fetch_array($order_query_check);
    $customers_vat_id = $order->customer ['vat_id'];

    $pdf->Rechnungsdaten($order->customer['csID'], $order_bill, $_GET['oID'], date("d.m.y", $date_purchased), $payment_method, $customers_vat_id, PDF_LIEFERSCHEIN);
    $pdf->RechnungStart($order->customer['lastname'], $customer_gender['customers_gender'], PDF_LIEFERSCHEIN);
    $pdf->ListeKopf();

    // Produktinfos

    $order_query=xtc_db_query("SELECT
                                            products_id,
                                            orders_products_id,
                                            products_model,
                                            products_name,
                                                    products_price,

                                            final_price,
                                            products_quantity
                                            FROM "
    .TABLE_ORDERS_PRODUCTS."
                                            WHERE orders_id='"
    .(int)$_GET['oID']."'");

    $order_data=array();

    // Ausgabe der Produkte
    while ($order_data_values = xtc_db_fetch_array($order_query))
    {
        $attributes_query = xtc_db_query("SELECT
                                            products_options,
                                            products_options_values,
                                            price_prefix,
                                            options_values_price
                                            FROM "
    .TABLE_ORDERS_PRODUCTS_ATTRIBUTES."
                                            WHERE orders_products_id='"
    .$order_data_values['orders_products_id']."'");

        $attributes_data='';
            $attributes_model='';

        while ($attributes_data_values = xtc_db_fetch_array($attributes_query)) {
            $attributes_data .= $attributes_data_values['products_options'].': '.$attributes_data_values['products_options_values']."\n";
                    $attributes_model .= xtc_get_attributes_model($order_data_values['products_id'],$attributes_data_values['products_options_values'],$attributes_data_values['products_options'])."\n";
        }

            $pdf->ListeProduktHinzu($order_data_values['products_quantity'], $order_data_values['products_name'], trim($attributes_data), $order_data_values['products_model'], trim($attributes_model),  xtc_format_price_order($order_data_values['products_price'],1,$order->info['currency']), xtc_format_price_order($order_data_values['final_price'],1,$order->info['currency']));
    }

    // Ausgabe der Summe
    $oder_total_query=xtc_db_query("SELECT
                                      title,
                                      text,
                                      class,
                                      value,
                                      sort_order
                                    FROM "
    .TABLE_ORDERS_TOTAL."
                                    WHERE orders_id='"
    .$_GET['oID']."'
                                    ORDER BY sort_order ASC"
    );

    $order_data = array();

    while ($oder_total_values = xtc_db_fetch_array($oder_total_query))
            $order_data[]=array('title' => $oder_total_values['title'], 'class'=> $oder_total_values['class'], 'value'=> $oder_total_values['value'], 'text' => $oder_total_values['text']);

    $pdf->Betrag($order_data);
    if ($order->info['payment_method']=='invoice')$pdf->Zahlart ();

    $pdf->comments ($comments_from_history);

    $pdf->RechnungEnde();

    $pdf->Output(STORE_NAME.'_Order_'.$_GET['oID'].'.pdf' , 'D');

    ?>
    lediglich geschieht das über den Umweg der print_packingslip...

    Code: PHP  [Auswählen]
    <?php
            define('PDF_LIEFERSCHEIN', true);
            include("print_order.php");
    ?>


    Linkback: https://www.modified-shop.org/forum/index.php?topic=13457.0

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Schau mal bitte hier: Fatal error: Cannot redeclare xtdbquery

    Grüße

    Torsten

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Der Thread enthält keine Lösung.
    Alternativ kannst du es hiermit umgehen, wenn du den erneuten Aufruf der "/admin/includes/application_top.php" nicht findest:

    Code: PHP  [Auswählen]
    if(!function_exists('xtDBquery')) {
      function xtDBquery($query) {
           if (DB_CACHE=='true') {
                 $result=xtc_db_queryCached($query);
                 //echo 'cached query: '.$query.'<br />';
              } else {
                 $result=xtc_db_query($query);
        }
        return $result;
      }
    }

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Wäre das nicht eine Sache, die wir übernehmen sollten? :?

    Grüße

    Torsten

    Clever

    • Schreiberling
    • Beiträge: 257
    Hi Torsten, den thread hab ich mir eben hübsch brav durchgelesen...
    JA wir haben UT drin - aber schon seit 2 Jahren...
    wie erwähnt seit 3 Monaten KEIN neues Modul mehr.
    lediglich die categorie_view würde um die Thumbnails der Produkte erweitert.

    Aber nix davon wird beim Ausdruck einer Rechnung abgefragt.
    Auch seltsam...das der Lieferschein sich ausdrucken lässt - wo es doch die gleichen Dateien sind. :panic:
    Wenn ich Dateien geändert hätte wüsste ich wenigstens wo ich ansetzen soll - aber die sind als 3 Monate nicht angerührt. :-(

    P.S.: Die 30 Minuten sind lange rum und ich kann nix antworten... für Threadersteller sehr nervend...
    wird bei jedem Antwortversuch der Timer wieder auf 0 gestellt ?

    EDIT: Danke Dokuman - leider bringt Deine Lösung ein neues Problem -
    Warning: ini_set() [function.ini-set]: A session is active. You cannot change the session module's ini settings at this time in /xxx/admin/includes/application_top.php on line 43

    Fatal error: Cannot redeclare class logger in /xxx/admin/includes/classes/logger.php on line 18

    Code: PHP  [Auswählen]
        ini_set('session.use_trans_sid', 0);
    steht in der application line 43

    Code: PHP  [Auswählen]
      class logger {
        var $timer_start, $timer_stop, $timer_total;

        // class constructor
        function logger() {
          $this->timer_start();
        }
    die "logger.php" ist komplett unverändert (kannte die bisher gar nicht).

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Aber den Lösungsansatz von DokuMan scheinst du nun völlig übersehen zu haben. :D

    Grüße

    Torsten

    Clever

    • Schreiberling
    • Beiträge: 257
    Nö, nicht übersehen...kann aber nur alle 30 Min schreiben, :-( darum hier immer brav was drangeklebt. :)
    und bereits gemeldet das die Lösung neue Probleme aufwirft...

    Es gibt übrigens eine Sache, die sich wohl geändert hat...
    Mir fiel eben ein da unser SSL Zertifikat in einigen Tagen abläuft und wir dieses erneuert haben.
    Dabei sind wir von "Wildcard" auf "Single" umgestiegen.

    Aber auch dies kann das alles eigentlich nicht erklären.  :(

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Das nachträgliche Editieren deiner vorherigen Beiträge bringt reichlich wenig, da da keiner mehr von uns hinschaut. ;-)

    Vor allem, wenn du dort auf einen Beitrag weiter unten antwortest. :crazy:

    Ich habe das mal in Form gebracht.

    Grüße

    Torsten

    Clever

    • Schreiberling
    • Beiträge: 257
    also wie es der Zufall will habe ich einen absolut identischen Shop, den ich erst vor 7 Tagen gespiegelt hatte.
    bei dem lassen sich die Rechnungen problemlos ausdrucken.
    ich habe bereits den kompletten Ordner Admin sowie den Ordner INC getauscht...
    doch beim Hauptshop bleibt die Fehlermeldung erhalten.

    Ich hab auch keine Ahnung wo ich da noch suchen muß - ein shop tut's problemlos, einer mit den gleichen Einstellungen und gleichen Dateien tut es nicht. :-(

    kann es vielleicht doch mit dem SSL zusammenhängen ? (wüsste nicht wie...aber das ist der einzige unterschied der beiden)

    DokuMan

    • modified Team
    • Beiträge: 6.669
    • Geschlecht:
    Du hast wahrscheinlich irgendwo ein
    Code: PHP  [Auswählen]
    include("admin/includes/application_top.php")
    wo es nicht hingehört oder 2x eingebunden.

    hendrik

    • Experte
    • Beiträge: 2.038
    Also ich tippe darauf, daß irgendwo, irgendwie, die application_top zweimal eingebunden wird.

    Du kannst dir mit folgendem helfen. Anstatt require(application_top) änderst du in allen in Frage kommenden Dateien in require_once. Ursache, daß in irgendeiner Individualanpassung nicht sorgfältig drauf geachtet wurde Libs nur einmal zu inkludieren.

    Wäre das nicht eine Sache, die wir übernehmen sollten? :?
    [...]

    Nicht gut. Der Trick ist zwar ok um das Wochenende zu retten. Aber wenn jemand fehlerhaft programmiert sollte er dafür auch gleich Errors bekommen damit er es merkt und keine Streicheleinheiten.

    Gruß
    Hen

    Clever

    • Schreiberling
    • Beiträge: 257
    hmm nochmal ...
    ich habe 2 identische Shops
    Shop A - der schon seit 1 Jahr on ist un seit 3 Monaten keinerlei Veränderung erfuhr...
    Shop B - den ich am 31.05.11 vom Shop A komplett gespiegelt habe - sie sind somit 100% identisch.

    Nun habe ich es versucht - im Shop B - der ja neu ist - kann ich alles wie gewohnt drucken.
    in Shop A kommt besagter Error - OBWOHL ich dort absolut nix geändert habe UND wir gestern noch drucken konnten.
    Shop A - soweit konnte ich das im FTP ersehen hatte auch keine Datei die irgendwie geändert wurde.

    NUN habe ich mittleiweile die Ordner Admin, INC & Templates/unsertemplate/ADMIN vom Shop B wieder zum Shop A kopiert.

    Doch der Fehler im Shop A bleibt stets der selbe.  :`(

    Außer den gesamten Admindateien aber kann doch nur eine INC Datei schuld sein - die aber habe ich komplett getauscht.

    Darum habe ich nun absolut keine Idee mehr wo sich dieser doppelte Aufruf befinden soll.

    Welche Datei außerhalb des Admin und des INC Ordners ruft die ADIMN/includes/application_top.php denn noch auf ? hat da jemand eine Idee ?

    hendrik

    • Experte
    • Beiträge: 2.038
    Das ist nicht der inc-Ordner. Die Funktion xtdbquery liegt in admin/application_top.php.

    Gruß
    Hen

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    [...]
    Nicht gut. Der Trick ist zwar ok um das Wochenende zu retten. Aber wenn jemand fehlerhaft programmiert sollte er dafür auch gleich Errors bekommen damit er es merkt und keine Streicheleinheiten.
    [...]

    Vollkommen richtig! Sorry... doofe Frage gewesen... :doh: :datz:

    Grüße

    Torsten

    Clever

    • Schreiberling
    • Beiträge: 257
    Puh meine 30 Minuten Maulkorb sind rum :-)

    also:
    der Trick mit "require_once" in der "/admin/print_order.php" bringt leider keine andere Meldung als die bereits erwähnte...

    Darüber hinaus habe ich nun mittlerweile den gesamten Shop B zurück zu Shop A kopiert.
    Der Fehler aber bleibt (nur bei Shop A nicht aber bei Shop B) der Gleiche.

    Und HEN...Wenn Du mehr gelesen hättest wüßtest Du sicher auch das ich nicht die Funktion "xtDBquery" gesucht hatte - sondern den Übeltäter der für einen doppelten Aufruf sorgt.
    Der also die "application_top.php" (die im übrigen nicht in "/admin/" sondern in "/admin/includes/" liegt) und somit die besagte Funktion ein weiteres mal aufruft.

    Da beide Shops 100% identisch sind (sogar Produkte / Kunden etc.) kann ich absolut keine Grund dafür sehen warum der Ausdruck der Rechnung in Shop A über Nacht nicht mehr möglich ist.
    Da ich aber die gesamten Dateien seit dem durch die Backups vom 31.05.11 (die ja im Shop B einwandfrei laufen) ersetzt habe kann ich mir das alles nur noch mit Aliens erklären.  :ironie:

    5 Antworten
    2769 Aufrufe
    09. August 2013, 10:43:49 von pomm
    7 Antworten
    3370 Aufrufe
    29. Mai 2015, 18:06:27 von Hansi73
    21 Antworten
    10147 Aufrufe
    18. Juli 2009, 18:09:31 von Anonym
               
    anything