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: Modifizierte Afterbuy-Schnittstelle PHP 8.1

    roland.k

    • Fördermitglied
    • Beiträge: 98
    Modifizierte Afterbuy-Schnittstelle PHP 8.1
    am: 19. September 2022, 18:22:09
    Hallo,

    in meinem Shop ist eine leicht modifizierte Afterbuy-Schnittstelle welche alle Bestellungen auf einen Rutsch ins Afterbuy schiebt. Im Standard hat das immer nur eine einzige Bestellung per Klick exportiert. Ich rufe die PHP-Datei direkt im Browser auf, jedoch passiert da nichts mehr, seit ich den Shop auf PHP 8.0/8.1 umgestellt habe (was der Provider voraussetzt).

    Hier die PHP-Datei, welche wohl "nicht" mehr PHP8-Kompatibel ist und nur bis 7.4 gelaufen ist. Hat wer eine Idee, ob man das auf 8.0 anpassen könnte?

    Code: PHP  [Auswählen]
    if (file_exists('./../includes/application_top_export.php'))   
            require_once('./../includes/application_top_export.php');
    else
            die("Fehler: fehlende Datei application_top_export.php fehlt");
    ?>
    <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html <?php echo HTML_PARAMS; ?>>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $_SESSION['language_charset']; ?>">
    <title><?php echo TITLE; ?></title>
    </head>
    <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"">

    <?php
    /*****************************************************************************/
    /*****************************************************************************/
               
                    $check_query = xtc_db_query("SELECT * FROM ".TABLE_ORDERS." WHERE afterbuy_success <> 1 ");
                    //$check_query = xtc_db_query("SELECT * FROM ".TABLE_ORDERS." WHERE afterbuy_success <> 1 and orders_id >100000 ");
                    require_once (DIR_WS_CLASSES.'afterbuy.php');
                    echo "<pre>";
                    if (AFTERBUY_ACTIVATED == 'true')
                    {
                            while ($data = xtc_db_fetch_array($check_query))
                            {
                                    echo "<br>pr&uuml;fe ".$data['orders_id'];
                                    if ($data['afterbuy_success'] != 1)
                                    {
                                            echo "<br>Bestellung nicht in Afterbuy ".$data['orders_id'];
                                            $insert_id = $data['orders_id'];
                                            /*$paypal_sql = "SELECT * FROM ".TABLE_PAYPAL." WHERE xtc_order_id ='".$insert_id."' ORDER BY payment_date DESC";
                                            $paypal_query = xtc_db_query($paypal_sql);
                                            $paypal_data = xtc_db_fetch_array($paypal_query);
                                            print_r($paypal_data);*/

                                            //if (count($paypal_query))
                                            //{
                                            //      if ($paypal_data['payment_status'] == 'Completed')
                                            //      {
                                                           
                                                           
                                                            $aBUY = new xtc_afterbuy_functions($insert_id);
                                                            echo "<br>an Afterbuy senden $insert_id";
                                                            if ($aBUY->order_send())
                                                            {
                                                                    $aBUY->process_order();
                                                                    echo "<br>Bestellung gesendet:".$insert_id;
                                                                    //echo "<br>Bestellung :".$insert_id;
                                                            }
                                            //      }
                                            //      else
                                            //              echo "<br> nicht an Afterbuy senden";
                                            //}
                                    }
                            }
                    }

    ?>
    <br>
    Afterbuy-Bestell&uuml;bertragung cronjob-Version: Verarbeitung beendet.
    </body>
    </html>
     

    Bin für jede Hilfe dankbar.

    Grüße
    Roland

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

    Timm

    • Fördermitglied
    • Beiträge: 6.258
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #1 am: 19. September 2022, 22:13:22
    Moin

    Was sagt denn das log zu dem Zeitpunkt? Dann kann man die Stelle wo es hakt schneller finden.

    Gruß Timm

    roland.k

    • Fördermitglied
    • Beiträge: 98
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #2 am: 20. September 2022, 09:53:34
    Oh, ja, logisch ....

    Hier der Fehler:

    Code: PHP  [Auswählen]
    [2022-09-20 09:45:10]   [error] [modified]      [pid:24151]     ERROR found for URL: /export/ab_send_order.php  {}      {}
    [2022-09-20 09:45:10]   [error] [modified]      [pid:24151]     Undefined constant "HTML_PARAMS" in File: Serverpfad/export/ab_send_order.php on Line: 19       {}

    Da ist dann wohl diese Variable nicht mehr existent: HTML_PARAMS
    Zeile 19:

    Code: PHP  [Auswählen]
    <html <?php echo HTML_PARAMS; ?>>

    Bin jetzt nicht so der PHP-Fachmann. Könnte ich zur Not da einfach die Ausgabe dieser Variablen abstellen oder gibt es eine Alternative Variable in PHP8? Falls ja, wie müsste der Code aussehen?

    Grüße
    Roland

    Karl1

    • Experte
    • Beiträge: 1.880
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #3 am: 20. September 2022, 11:09:22
    Hallo Roland,
    ich kenne Afterbuy nicht, deshalb ist es nicht möglich dir gezielt zu helfen.

    Deine Fehlermeldung kannst du beheben indem du in Zeile 19 schreibst
    Code: PHP  [Auswählen]
    <html lang="de">

    Gruß Karl

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #4 am: 20. September 2022, 17:46:23
    HTML_PARAMS ist keine Variable sondern eine Konstante und ist in der /lang/SPRACHE/SPRACHE.php  definiert und die wird in der benutzten application_top_export.php  nicht geladen.
    Korrekter Code
    Code: PHP  [Auswählen]
    <html<?php echo ' lang="'.$_SESSION['language_code'].'"'); ?>>

    Der Doctype sollte das sein, denke ich:
    Code: XML  [Auswählen]
    <!DOCTYPE html>

    Wo und wie wird die Datei aufgerufen ?

    Gruß,
    noRiddle

    roland.k

    • Fördermitglied
    • Beiträge: 98
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #5 am: 21. September 2022, 07:45:38
    Hallo,

    die PHP-Datei wird von Hand im Browser aufgerufen und nicht Programmgesteuert.

    Grüße
    Roland

    Karl1

    • Experte
    • Beiträge: 1.880
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #6 am: 21. September 2022, 09:52:57
    Hallo Roland,
    das Problem liegt vermutlich daran, dass Sprachdateien nicht mehr eingelesen werden und Session-Variablen nicht mehr gesetzt werden.

    Tausche einfach die Zeilen zwischen doctype und head-Tag mit diesen und teste mal
    Code: PHP  [Auswählen]
    <!DOCTYPE html>
    <html dir="ltr" lang="de">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title>Afterbuy</title>
    </head>
    Charset könnte eventuell bei dir auch "ISO-8859-15" sein.

    Gruß Karl

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #7 am: 21. September 2022, 16:36:00
    In der Tat wird in der im Skript eingebundenen /includes/application_top_export.php  keine Session gestartet.
    Wenn die Datei i m Browser aufgerufen wird sollte man die application_top.php  anstelle der application_top_export.php  includieren dann sind sowohl die Sprachkonstanten als auch die Session gesetzt.

    Gruß,
    noRiddle

    roland.k

    • Fördermitglied
    • Beiträge: 98
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #8 am: 22. September 2022, 08:07:31
    Vieeeeeeeeeeelen Dank,

    ich hab das geändert und nun funktioniert das wieder.

    Grüße
    Roland

    roland.k

    • Fördermitglied
    • Beiträge: 98
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #9 am: 22. September 2022, 20:03:54
    Hallo,

    hatte zum Test leider noch die PHP 7.4 aktiv ..
    Mit PHP 8.1 kommt noch immer ein Fehler im Log und die Datei läuft nicht.

    [2022-09-22 19:56:49]   [warning]   [modified]   [pid:25669]   WARNING found for URL: /export/ab_send_order.php   {}   {}
    [2022-09-22 19:56:49]   [warning]   [modified]   [pid:25669]   Undefined global variable $_SESSION in File: /is/htdocs/Provider/www/sitzsack-kaufhaus.de/export/ab_send_order.php on Line: 24   {}   {}
    [2022-09-22 19:56:49]   [warning]   [modified]   [pid:25669]   WARNING found for URL: /export/ab_send_order.php   {}   {}
    [2022-09-22 19:56:49]   [warning]   [modified]   [pid:25669]   Trying to access array offset on value of type null in File: /is/htdocs/wp12986762_R2R62B59NA/www/sitzsack-kaufhaus.de/export/ab_send_order.php on Line: 24   {}   {}

    Hier der aktuelle Code der PHP-Datei:

    Code: PHP  [Auswählen]
    <?php
    if (file_exists('./../includes/application_top_export.php'))   
            require_once('./../includes/application_top_export.php');
    else
            die("Fehler: fehlende Datei application_top_export.php fehlt");
    ?>
    <!DOCTYPE html>
    <html dir="ltr" lang="de">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title>Afterbuy</title>
    </head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?php echo $_SESSION['language_charset']; ?>">
    <title><?php echo TITLE; ?></title>
    </head>
    <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"">

    <?php
    /*****************************************************************************/
    /*****************************************************************************/
               
                    $check_query = xtc_db_query("SELECT * FROM ".TABLE_ORDERS." WHERE afterbuy_success <> 1 ");
                    //$check_query = xtc_db_query("SELECT * FROM ".TABLE_ORDERS." WHERE afterbuy_success <> 1 and orders_id >100000 ");
                    require_once (DIR_WS_CLASSES.'afterbuy.php');
                    echo "<pre>";
                    if (AFTERBUY_ACTIVATED == 'true')
                    {
                            while ($data = xtc_db_fetch_array($check_query))
                            {
                                    echo "<br>pr&uuml;fe ".$data['orders_id'];
                                    if ($data['afterbuy_success'] != 1)
                                    {
                                            echo "<br>Bestellung nicht in Afterbuy ".$data['orders_id'];
                                            $insert_id = $data['orders_id'];
                                            /*$paypal_sql = "SELECT * FROM ".TABLE_PAYPAL." WHERE xtc_order_id ='".$insert_id."' ORDER BY payment_date DESC";
                                            $paypal_query = xtc_db_query($paypal_sql);
                                            $paypal_data = xtc_db_fetch_array($paypal_query);
                                            print_r($paypal_data);*/

                                            //if (count($paypal_query))
                                            //{
                                            //      if ($paypal_data['payment_status'] == 'Completed')
                                            //      {
                                                           
                                                           
                                                            $aBUY = new xtc_afterbuy_functions($insert_id);
                                                            echo "<br>an Afterbuy senden $insert_id";
                                                            if ($aBUY->order_send())
                                                            {
                                                                    $aBUY->process_order();
                                                                    echo "<br>Bestellung gesendet:".$insert_id;
                                                                    //echo "<br>Bestellung :".$insert_id;
                                                            }
                                            //      }
                                            //      else
                                            //              echo "<br> nicht an Afterbuy senden";
                                            //}
                                    }
                            }
                    }

    ?>
    <br>
    Afterbuy-Bestell&uuml;bertragung cronjob-Version: Verarbeitung beendet.
    </body>
    </html>
     
    [

    Timm

    • Fördermitglied
    • Beiträge: 6.258
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #10 am: 22. September 2022, 23:16:48
    Moin

    kommt der Fehler auch, wenn du wie von @noRiddle vorgeschlagen die application_top.php oben einbindest statt der application_top_export.ph? Denn in deinem Code der Datei ist das noch nicht integriert.

    Gruß Timm

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #11 am: 23. September 2022, 08:30:30
    Richtige Frage.
    @roland.k
    Du hast jetzt so ein halb und halb eingebaut von dem was meine Wenigkeit und dem was Karl1 geschrieben hat.

    Gruß,
    noRiddle

    roland.k

    • Fördermitglied
    • Beiträge: 98
    Re: Modifizierte Afterbuy-Schnittstelle PHP 8.1
    Antwort #12 am: 24. September 2022, 17:02:06
    Hallo,

    es hat etwas gedauert, da ich im Ausland bin ...

    Hab nun alles beschriebene mal in allen Varianten getestet und die Lösung war:

    Tausche einfach die Zeilen zwischen doctype und head-Tag mit diesen und teste mal

    <!DOCTYPE html>
    <html dir="ltr" lang="de">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title>Afterbuy</title>
    </head>


    Vielen Dank für Eure Hilfe!

    Grüße
    Roland
    11 Antworten
    11233 Aufrufe
    07. Oktober 2009, 14:07:13 von Tomcraft
    8 Antworten
    6307 Aufrufe
    24. September 2012, 13:02:57 von Tomcraft
    0 Antworten
    799 Aufrufe
    24. April 2020, 15:15:23 von fishnet
    7 Antworten
    4758 Aufrufe
    04. Januar 2015, 10:42:31 von Phantom