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: Von 1.06 auf 2.0 Läuft der Shop auf MySqli?Haben sich Datenbankfelder geändert?

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Hallo zusammen,

    ich habe gestern versucht unseren Onlineshop von Version 1.06 auf Version 2 anzuheben.
    Das hat einwandfrei funktioniert.

    Dann wollte ich unseren Shop an die Warenwirtschaft (Microtech Büro+) anbinden und erhielt die Meldung dass die MySql Version nicht stimmen würde.

    Im log wurden alle Dateien mit /inc/xtc_db_* bemängelt.

    Die wurden tatsächlich alle geändert.

    Jetzt steht dort überall

    Code: PHP  [Auswählen]
     die('Deprecated File: '.basename(__FILE__).'. Use db_functions_mysql(i) instead.');

    und der restliche Code wurde ausgeklammert.

    Hier hört leider meine Kenntnis auf.
    Was bedeutet dies? Läuft der Shop dadurch auf MySqli?

    In der /includes/configuration.php steht der Eintrag auf mysql.

    Ich habe dann einfach die alten  /inc/xtc_db_* aus der 1.06 genommen und die Warenwirtschaft konnte wieder mit unserem kommunizieren.

    Testbestellung lief auch. Das Kundenkonto / Adresse konnte noch abgeholt werden, aber bei der Bestellung selbst erhielt ich dann die Meldung:

    Code: SQL  [Auswählen]
    Fehler IN SQL-Query:

    1054 - UNKNOWN COLUMN 'o.cc_owner' IN 'field list'

    SELECT o.orders_id AS OrdersId, o.shipping_method AS shipping_method, o.comments AS comments, o.payment_class AS payment_class, o.delivery_country AS delivery_country,
           
                                    IF(o.billing_company='',
                                            IF (NOT ISNULL(re_ab.address_book_id),
                                                    IF(re_ab.entry_gender='m','Herr','Frau'),
                                                    IF(c.customers_gender='m','Herr','Frau')),
                                            'Firma') AS Name1,
                                           
                                    IF(o.billing_company='',TRIM(o.billing_name) ,o.billing_company) AS Name2,
                                                           
                                    IF(o.delivery_company='',
                                            IF (NOT ISNULL(li_ab.address_book_id),
                                                    IF (li_ab.entry_gender='m','Herr','Frau'),
                                                    IF (c.customers_gender='m','Herr','Frau')),
                                            'Firma') AS LiName1,
                                   
                                    IF(o.delivery_company='',TRIM(o.delivery_name) ,o.delivery_company) AS LiName2,
                           
                                    o.customers_id AS WShopIDAdresse,
                                    cod.countries_iso_code_2 AS LiLandKennz,        cob.countries_iso_code_2 AS ReLandKennz,
                                    osh.comments AS Bemerkungen,                            o.date_purchased AS Dat,
                                    o.shipping_class AS VersandArt,                         o.payment_class AS ZahlungsOption,
           
                                    o.delivery_name AS delivery_name,                       o.delivery_company AS delivery_company,
                                    o.delivery_street_address AS delivery_street_address,   o.delivery_city AS delivery_city,
                                    o.delivery_postcode AS delivery_postcode,       o.billing_name AS billing_name,
                                    o.billing_company AS billing_company,           o.billing_street_address AS billing_street_address,
                                    o.billing_city AS billing_city,                         o.billing_postcode AS billing_postcode,
                                    o.cc_owner AS cc_owner,                                         o.cc_number AS cc_number,
                                    o.cc_expires AS cc_expires,                                     o.currency AS currency,
                                    o.customers_vat_id AS UStId,                            (o.customers_status - 2) AS ArtPrGrp,
                                    o.customers_status AS AdressStatus,
                                    re_ab.address_book_id AS WShopIDReAns,          li_ab.address_book_id AS WShopIDLiAns ,
                                    o.delivery_firstname AS LiAspVNa,o.delivery_lastname AS LiAspNNa,'' AS LiAspTel,'' AS LiAspFax,
                                    o.billing_firstname AS ReAspVNa,o.billing_lastname AS ReAspNNa,o.customers_telephone AS ReAspTel,'' AS ReAspFax,
                                    o.customers_email_address AS AspEMail
                                   
                                    FROM orders o
                                     
                                    LEFT OUTER JOIN orders_status_history osh ON (osh.orders_id = o.orders_id AND osh.orders_status_id = 1)
                                    LEFT OUTER JOIN customers c ON (c.customers_id = o.customers_id)
                                    LEFT OUTER JOIN countries cod ON (cod.countries_name = o.delivery_country)
                                    LEFT OUTER JOIN countries cob ON (cob.countries_name = o.billing_country)
                                    LEFT OUTER JOIN address_book re_ab ON ( re_ab.customers_id = o.customers_id AND
                                                                                                                    re_ab.entry_company = o.billing_company AND
                                                                                                                    TRIM(CONCAT(re_ab.entry_firstname, ' ', re_ab.entry_lastname)) = TRIM(o.billing_name) AND
                                                                                                                    re_ab.entry_street_address = o.billing_street_address AND
                                                                                                                    re_ab.entry_postcode = o.billing_postcode AND
                                                                                                                    re_ab.entry_city = o.billing_city)
           
                                    LEFT OUTER JOIN address_book li_ab ON ( li_ab.customers_id = o.customers_id AND
                                                                                                                    li_ab.entry_company = o.delivery_company AND
                                                                                                                    TRIM(CONCAT(li_ab.entry_firstname, ' ', li_ab.entry_lastname)) = TRIM(o.delivery_name) AND
                                                                                                                    li_ab.entry_street_address = o.delivery_street_address AND
                                                                                                                    li_ab.entry_postcode = o.delivery_postcode AND
                                                                                                                    li_ab.entry_city = o.delivery_city)
                                   
                                    WHERE o.orders_id IN ('257597', '257598')
                                    GROUP BY o.orders_id
    --.


       bei d.a(List`1 A_0, List`1 A_1, List`1 A_2, List`1 A_3, Int32 A_4)
       bei cb.b(List`1& A_0)
       bei cb.z()
       bei cb.y()
       bei cb.r()
    [23.03.17-22:58:11] Warnung: Während der Synchronisation ist mindestens ein Fehler aufgetreten

    Wurden die Datenbankfelder evtl. umbenannt wo die Adressen und Vorgänge enthalten sind?

    Ich habe die Hoffnung es liegt vielleicht an einem Fehler meinerseits und nicht an der Schnittstelle zur Wawi und hier könnt mir hier vielleicht weiter helfen.

    Ich werde zwar heute versuchen die Firma zu kontaktieren, welche für die Schnittstelle zu unserer Warenwirtschaft verantwortlich ist, aber ich wollte nun keine Zeit verlieren und nachfragen ob der Fehler evtl. bei mir liegt.

    Vielen lieben Dank vorab die Hilfe.

    Gruß Heiko

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

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Ändere in der configure.php einfach den Eintrag "mysql" in "mysqli", das behebt wohl das 1. Problem mit der Warenwirtschaft.

    Der 2. Fehler kommt zustande, weil die Kreditkarten-Felder ab Shopversion 2.x nicht mehr vorhanden sind. Dies liegt daran, dass man diese Daten nicht mehr speichern darf/soll. Man könnte sie nachträglich wieder einfügen, wenn die WaWi diese braucht, aber der Schnittstellen-Anbieter sollte das wissen und die Schnittstelle dahingehend angleichen, dass die Kreditkartenfelder nicht mehr abgerufen werden sollen.

    Falls die von dir gepostet SQL-Query für dich greifbar ist (z. B. in der Schnittstelle/dem Connector auf dem Server), dann lösche mal folgende Zeilen aus der Abfrage:

    Code: PHP  [Auswählen]
    o.cc_owner AS cc_owner,                                        
    o.cc_number AS cc_number,
    o.cc_expires AS cc_expires,                                    
    o.currency AS currency,

    Das sollte das Problem auch lösen.

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Vielen lieben Dank für deine schnelle Hilfe.

    Fehler 1: Eigentlich gelöst, aber kurz die Erklärung:

    Das mit den /inc/xtc_db_* Dateien.
    Die configure.php hatte ich schon auf mysql umgestellt. Dennoch bekam ich die Meldung:

    Code: PHP  [Auswählen]
    [23.03.17-22:28:13]
    Fehler bei der Anforderung mit folgender Fehlermeldung:
    --
    Deprecated File: xtc_db_close.inc.php. Use db_functions_mysql(i) instead.
    --.
     

    Ich musste das

    Code: PHP  [Auswählen]
    die('Deprecated File: '.basename(__FILE__).'. Use db_functions_mysql(i) instead.');

    entfernen und den restlichen Code - zb:

    Code: PHP  [Auswählen]
    /*  
      function xtc_db_close($link = 'db_link') {
        global $$link;

        return mysql_close($$link);
      }
    */

     ausklammern. Erst dann lief es wieder.

    Fehler 2: Danke für den Hinweis.
    Das hilft mir weiter. Also bedeutet es, dass gewisse Felder nicht mehr da sind.
    Ist irgendwo evtl. dokumentiert welche Felder noch beim Update entfernt wurden?
    Ich bin sowie so überrascht dass unsere Schnittstelle auf die Kreditdaten zurück greift, weil das für uns gar nicht einstellbar/abfragbar ist.

    Ich kann nur an solche Einstellungen ran:

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Aber "tiefer" komme ich leider nicht ran.
    Daher würde ich, bis die Firma da eine Lösung hat, den Weg gehen und die Felder wieder hinzufügen die beim Update gelöscht wurden.

    Gruß Heiko

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Ich habe es gefunden!
    Auf dem Server liegt ein Ordner von der Schnittstelle.
    Dort liegen Dateien die mit unserer Shopdatenbank und der Schnittstelle komunizieren.

    Unter anderem eine "ServiceVorgang.class.php"

    In der ist unter anderem folgendes enthalten:

    Code: PHP  [Auswählen]
                    } else {
                            $orders_query = sync_db_query ( "SELECT o.orders_id AS OrdersId,        $sql" . "$AnspSelectSQL
           
                                    IF(o.billing_company='',
                                            IF (NOT ISNULL(re_ab.address_book_id),
                                                    IF(re_ab.entry_gender='m','Herr','Frau'),
                                                    IF(c.customers_gender='m','Herr','Frau')),
                                            'Firma') AS Name1,
                                           
                                    IF(o.billing_company='',TRIM(o.billing_name) ,o.billing_company) AS Name2,
                                                           
                                    IF(o.delivery_company='',
                                            IF (NOT ISNULL(li_ab.address_book_id),
                                                    IF (li_ab.entry_gender='m','Herr','Frau'),
                                                    IF (c.customers_gender='m','Herr','Frau')),
                                            'Firma') AS LiName1,
                                   
                                    IF(o.delivery_company='',TRIM(o.delivery_name) ,o.delivery_company) AS LiName2,
                           
                                    o.customers_id AS WShopIDAdresse,
                                    cod.countries_iso_code_2 AS LiLandKennz,        cob.countries_iso_code_2 AS ReLandKennz,
                                    osh.comments AS Bemerkungen,                            o.date_purchased AS Dat,
                                    o.shipping_class AS VersandArt,                         o.payment_class AS ZahlungsOption,
           
                                    o.delivery_name AS delivery_name,                       o.delivery_company AS delivery_company,
                                    o.delivery_street_address AS delivery_street_address,   o.delivery_city AS delivery_city,
                                    o.delivery_postcode AS delivery_postcode,       o.billing_name AS billing_name,
                                    o.billing_company AS billing_company,           o.billing_street_address AS billing_street_address,
                                    o.billing_city AS billing_city,                         o.billing_postcode AS billing_postcode,
                                    o.cc_owner AS cc_owner,                                         o.cc_number AS cc_number,
                                    o.cc_expires AS cc_expires,                                     o.currency AS currency,
                                    o.customers_vat_id AS UStId,                            (o.customers_status - 2) AS ArtPrGrp,
                                    o.customers_status AS AdressStatus,
                                    re_ab.address_book_id AS WShopIDReAns,          li_ab.address_book_id AS WShopIDLiAns ,
                                    o.delivery_firstname as LiAspVNa,o.delivery_lastname as LiAspNNa,'' as LiAspTel,'' as LiAspFax,
                                    o.billing_firstname as ReAspVNa,o.billing_lastname as ReAspNNa,o.customers_telephone as ReAspTel,'' as ReAspFax,
                                    o.customers_email_address as AspEMail
                                   
                                    FROM orders o
                                     
                                    LEFT OUTER JOIN orders_status_history osh ON (osh.orders_id = o.orders_id AND osh.orders_status_id = 1)
                                    LEFT OUTER JOIN customers c ON (c.customers_id = o.customers_id)
                                    LEFT OUTER JOIN countries cod ON (cod.countries_name = o.delivery_country)
                                    LEFT OUTER JOIN countries cob ON (cob.countries_name = o.billing_country)
                                    LEFT OUTER JOIN address_book re_ab ON ( re_ab.customers_id = o.customers_id AND
                                                                                                                    re_ab.entry_company = o.billing_company AND
                                                                                                                    TRIM(CONCAT(re_ab.entry_firstname, ' ', re_ab.entry_lastname)) = TRIM(o.billing_name) AND
                                                                                                                    re_ab.entry_street_address = o.billing_street_address AND
                                                                                                                    re_ab.entry_postcode = o.billing_postcode AND
                                                                                                                    re_ab.entry_city = o.billing_city)
           
                                    LEFT OUTER JOIN address_book li_ab ON ( li_ab.customers_id = o.customers_id AND
                                                                                                                    li_ab.entry_company = o.delivery_company AND
                                                                                                                    TRIM(CONCAT(li_ab.entry_firstname, ' ', li_ab.entry_lastname)) = TRIM(o.delivery_name) AND
                                                                                                                    li_ab.entry_street_address = o.delivery_street_address AND
                                                                                                                    li_ab.entry_postcode = o.delivery_postcode AND
                                                                                                                    li_ab.entry_city = o.delivery_city)
                                   
                                    WHERE o.orders_id IN ($OrdersIdsSQL)
                                    GROUP BY o.orders_id"
    );
                    }

    Ich werde dann noch mal einen Anlauf versuchen und diese Zeilen einfach raus löschen.

    Wäre nur noch die Frage, was noch evtl. gelöscht wurde.

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:

    Der 2. Fehler kommt zustande, weil die Kreditkarten-Felder ab Shopversion 2.x nicht mehr vorhanden sind. Dies liegt daran, dass man diese Daten nicht mehr speichern darf/soll. Man könnte sie nachträglich wieder einfügen, wenn die WaWi diese braucht.....

    Kannst du mir sagen, welche Felder das in der Datenbank sind, bzw. wie die heißen?
    Weil cc_owner finde ich nicht, ich danke mal die haben ja in der Datenbank eine andere Bezeichnung.

    Danke dir vorab für die Mühe.

    Nachrag: Gefunden: https://www.modified-shop.org/wiki/Orders

    web28

    • modified Team
    • Beiträge: 9.404
    Die aletn Modified DB Funktionen wurden alle deprecated markiert und deaktiviert.

    Dafür gibt es neuen Funktionen die man auch benutzen sollte!

    Alte Methode in der application_top.php

    Code: PHP  [Auswählen]
    // Database
    require_once (DIR_FS_INC.'xtc_db_connect.inc.php');
    require_once (DIR_FS_INC.'xtc_db_close.inc.php');
    require_once (DIR_FS_INC.'xtc_db_error.inc.php');
    require_once (DIR_FS_INC.'xtc_db_perform.inc.php');
    require_once (DIR_FS_INC.'xtc_db_query.inc.php');
    require_once (DIR_FS_INC.'xtc_db_queryCached.inc.php');
    require_once (DIR_FS_INC.'xtc_db_fetch_array.inc.php');
    require_once (DIR_FS_INC.'xtc_db_num_rows.inc.php');
    require_once (DIR_FS_INC.'xtc_db_data_seek.inc.php');
    require_once (DIR_FS_INC.'xtc_db_insert_id.inc.php');
    require_once (DIR_FS_INC.'xtc_db_free_result.inc.php');
    require_once (DIR_FS_INC.'xtc_db_fetch_fields.inc.php');
    require_once (DIR_FS_INC.'xtc_db_output.inc.php');
    require_once (DIR_FS_INC.'xtc_db_input.inc.php');
    require_once (DIR_FS_INC.'xtc_db_prepare_input.inc.php');

    Neue Methode ab 2.0
    Code: PHP  [Auswählen]
    // Database
    require_once (DIR_FS_INC.'db_functions_'.DB_MYSQL_TYPE.'.inc.php');
    require_once (DIR_FS_INC.'db_functions.inc.php');

    Du solltest also schauen wo in der Schnittstelle die Dateien nach der alten Methode eingebunden werden und dann auf die neue Methode ändern.

    Ab der 2.0 DB gibt es die Felder mit cc_XXX nicht mehr in der Orders Tabelle.

    Hier gibt es einen Tipp wie man sie wieder hinzufügen kann:

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

    Es wäre aber besser die Schnittstelle anzupassen!

    Gruss Web28

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Danke web28.

    Ich habe mal die Schnittstelle durchforstet:

    Da gibt es zwei bereiche in einer "Service.inc.xtcommerce.php"

    Code: PHP  [Auswählen]
    //commerce:seo 2.4+
    if (file_exists(DIR_FS_INC . 'cseo_db.inc.php')) {
            require_once(DIR_FS_INC . 'cseo_db.inc.php');
    } else {
            require_once (DIR_FS_INC . 'xtc_db_close.inc.php');
            require_once (DIR_FS_INC . 'xtc_db_error.inc.php');
            require_once (DIR_FS_INC . 'xtc_db_perform.inc.php');
            require_once (DIR_FS_INC . 'xtc_db_query.inc.php');
            require_once (DIR_FS_INC . 'xtc_db_fetch_array.inc.php');
            require_once (DIR_FS_INC . 'xtc_db_num_rows.inc.php');
            require_once (DIR_FS_INC . 'xtc_db_insert_id.inc.php');
            require_once (DIR_FS_INC . 'xtc_db_input.inc.php');
    }

    Dieses werde ich dann im nächsten Versuch entfernen und durch das von die gepostete ausprobieren.

    Es gab in der Datei noch folgende Zeile:

    Code: PHP  [Auswählen]
            protected function getConfiguration()
            {
                    if (! defined ( CURRENT_TEMPLATE )) {
                            $configuration_query = sync_db_query ( 'select configuration_key as cfgKey, configuration_value as cfgValue from configuration' );
                            while ( $configuration = xtc_db_fetch_array ( $configuration_query ) ) {
                                    define ( $configuration ['cfgKey'], $configuration ['cfgValue'] );
                            }
                            define ( TABLE_LANGUAGES, 'languages' );
                    }
            }

    Keine Ahnung ob diese eine Auswirkung hat, da ich das Thema nicht ganz verstehe.

    Der Schnittstellenhersteller hat sich gemeldet. Es gibt ein Update für Modified 2.0 - aber nicht für unsere Schnittstellen Version. Erst mit der neuen Version ginge das.
    Da diese Version nur von deren Technikern auf unserem Server mit Termin installiert wird und auch dafür einige Tausend Euros verlangt wird, versuche ich erst mal den Weg über das eigene anpassen der Schnittstelle.

    Geplant war, dass wir frühstens im Oktober auf die neue Schnittstellen Version umsteigen und daher hoffe ich das es jetzt erst mal so läuft, weil ich ungerne bis Oktober auf Modified 2.0 warten möchte.
    Dafür habe ich mich zu sehr auf die neue Version gefreut, ich echt gut geworden ist ;)

    web28

    • modified Team
    • Beiträge: 9.404
    Das sollte das Problem mit den Datenbankfunktionen lösen:

    Code: PHP  [Auswählen]
    //commerce:seo 2.4+
    if (file_exists(DIR_FS_INC . 'cseo_db.inc.php')) {
            require_once(DIR_FS_INC . 'cseo_db.inc.php');
    } else {
            require_once (DIR_FS_INC.'db_functions_'.DB_MYSQL_TYPE.'.inc.php');
            require_once (DIR_FS_INC.'db_functions.inc.php');
    }

    Zu den Kreditkartendaten:

    Es ist wahrscheinlich einfacher die fehlenden DB Felder wieder hinzuzufügen
    Das kann man ich solchen Fällen (Wawi Schnittstelle) durchaus machen.
    Wenn die Felder sowieso leer sind ist das auch kein Sicherheitsrisiko.

    Gruss Web28

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Dankeschön für die schnelle Hilfe.
    Heute Abend werde ich den nächsten Anlauf nehmen und mich wieder melden ;)

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Hallo,

    danke noch mal für den Tipp. Wawi arbeitet nun mit dem Shop 2.0

    Eine Sache war allerdings noch.

    Ich erhielt die Meldung:

    Code: PHP  [Auswählen]
    require_once(): Failed opening required '/www/htdocs/***/domain.de/includes/classes/class.phpmailer.php' (include_path='.:/usr/share/php:..')

    Dadurch konnte er den Status einer Bestellung nicht umstellen, bzw. keine E-Mail versenden.
    Die Datei habe ich dann aus der 1.06 hinzugefügt.

    Danach erhielt ich die Meldung:

    Code: PHP  [Auswählen]
    require_once(): Failed opening required '/www/htdocs/***/domain.de/includes/classes/Smarty_2.6.14/Smarty.class.php' (include_path='.:/usr/share/php:..')

    Also habe ich den ganzen Ornder "Smarty_2.6.14" hochgeladen.
    Danach funktionierte alles.

    awids

    • Experte
    • Beiträge: 3.803
    • Geschlecht:
    Wenn du weiterhin 1.06 mit 2.x vermischt, wird dir bald keiner mehr helfen wollen, weil es viel zu kompliziert (und doof für uns) ist, deine ganzen Ersetzungen zurück zu verfolgen, um Hilfestellung zu leisten.

    Am Besten löscht du die 1.06-Datei wieder und schaust dir die Schnittstelle nochmal an. Dort  müsste es oben im Kopf der Datei folgenden Aufruf geben:

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

    Diesen änderst du wie folgt ab, um die entsprechende Datei von modified-2.x aufzurufen:

    Code: PHP  [Auswählen]
    require_once(DIR_FS_CATALOG.DIR_WS_INCLUDES.'external/phpmailer/class.phpmailer.php');

    derheiko

    • Fördermitglied
    • Beiträge: 470
    • Geschlecht:
    Guten morgen Alex und vielen Dank.
    Das werde ich umgehen umsetzten.

    Ich gebe dir vollkommen recht. Daher dokumentiere ich mir auch brav alles was ich als "provisorische" Lösung umsetze.

    Wenn wir dann in den nächsten Monaten die neue Schnittstelle bekommen, dann mache ich dieses gefrickel auch wieder rückgängig.

    Ich bin nur froh dass es bis dahin endlich läuft und wir nun mit Modified 2.0 arbeiten können ohne noch Monate auf die Schittstelle warten zu müssen ;)

    Danke nochmal.
    2 Antworten
    2677 Aufrufe
    04. August 2011, 18:18:08 von DokuMan
    2 Antworten
    1881 Aufrufe
    14. Juni 2010, 09:36:26 von DanceOnTop
    9 Antworten
    4281 Aufrufe
    24. September 2014, 21:44:20 von mhunziger
               
    anything