Umstellung von PHP 5.6 auf PHP 7

  • Hallo Andy,


    vielen Dank für die Ausführungen zum Thema:

    "Umstellung von PHP 5.6 auf PHP 7 – Scripte mit MySQL".


    Darf ich Deine Hilfe in Anspruch nehmen?


    Ich habe auf einem lokalen PC --> XAMPP Control Panel v3.2.2 mit PHP/5.6.40 installiert.

    Auf diesem PC generiere ich meine Websit und übertrage die Dateien und Datenbanken zu 1&1 IONOS.

    Mit dem PHP5.6 Extended Support von 1und1 wird meine Seite am "Leben" gehalten.


    An einem zweiten PC wurde nun das XAMPP Control Panel v3.2.4 mit PHP 7.4.5 installiert.

    Alle Dateien mit mysql_ Funktionen wurden, wie von dir beschrieben, in mysqli_ Funktionen (unter Beachtung der Reihenfolge der Parameter) geändert.


    Viele Fehlermeldungen konnte ich so beheben.


    Zwei Fehler verursachen noch diverse Warnungen beim Import der Preise.


    Preise_Importieren

    Preise_Importieren_Klick_auf_Bild_1

    Preise_Importieren_Klick_auf_Bild_2


    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    1. Warnung

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    ????????

    Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\xxxxxx\Services\DBExecute.inc on line 25


    Originalcode:

    $aError[1]=mysql_error();


    geändert in:

    $aError[1]=mysqli_error();



    Inhalt der Datei: als Anlage


    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    2. Warnung (gleiche Ursache?)

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


    ????????

    Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\xxxxxx\Services\DBSelect.inc on line 115


    Originalcode:

    $aError[1]=mysql_error();


    geändert in:

    $aError[1]=mysqli_error();

    ????????


    Inhalt der Datei: als Anlage


    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    3. weitere MeldungenDBExecute.txtDBSelect.txt

    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Navigation has a deprecated constructor in

    C:\xampp\htdocs\xxxxxx\PHP\class_Navigation.inc on line 4


    Die Meldung konnte ich auch in diversen anderen Dateien abstellen.


    Originalcode:

    class irgendein_name {

    function irgendein_name () {


    geändert in:

    class irgendein_name {

    function __construct() {


    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


    Fragen:

    1. Was soll ich bei den ersten beiden Warnungen ändern, damit der Code keine Fehler mehr verursacht?


    2. Umlaute werden nicht richtig dargestellt. <-- Welche Einstellungen sind notwendig?

    C:\xampp\htdocs\xxxxxx\index.php on line 1381

    header('Content-Type: text/html; charset=ISO-8859-1');


    ArtikelEditieren.php

    ini_set("default_charset", "iso-8859-1");


    phpMyAdmin-Einstellungen als Anlage



    Für Deine Bemühungen bedanke ich mich schon jetzt.


    Schöne Grüße

    Topinambur

    • Offizieller Beitrag

    Hallo,


    soweit hast Du denke alles gut angepasst, nur bei der Funktion "$aError[1]=mysqli_error();" muss jetzt noch ein Parameter mit übergeben werden. Der Datenbanklink. Das ist der Parameter $db aus dem folgenden Beispiel:


    Code
    $result = mysqli_query($db, $sql);

    Also irgendwie so:


    Code
    $aError[1]=mysqli_error($db);


    Wobei der Name "db" bei Dir entsprechend anders sein kann.


    Gruß

    Andy

  • Hallo Andy,


    vielen Dank für die schnelle Antwort.


    Ob ich

    $aError[1]=mysqli_error($db);

    oder

    $aError[1]=mysqli_error($DB);

    verwende, die Fehlermeldung bleibt die gleiche.


    Wenn ich (nach dem, was in den Dateien noch so steht)

    $aError[1]=mysqli_error($sDBConnection);

    verwende, bekomme ich diverse gleiche Fehlermeldungen.


    Array ( [0] => keine gültiger SQL Befehl [1] => Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '=' )

    Array ( [0] => keine gültiger SQL Befehl [1] => Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '=' )

    ...


    Hast Du noch eine Idee?



    Schöne Grüße


    Topinambur

  • Hallo Andy,


    nach dem Klick auf "Preise importieren"

    wird mir die Zeile


    Array ( [0] => keine gültiger SQL Befehl [1] => Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '=' )


    insgesamt 157 Mal angezeigt.

    Eine weitere Anzeige (über einen Fehler in einer Datei) ist nicht vorhanden.


    Stimmen die Zeichensatz-Einstellungen?



    DANKE

    Schöne Grüße


    Topinambur

    • Offizieller Beitrag

    Ganz ehrlich, jetzt wird es schwierig. :)


    Zum Thema findet man einiges im Internet. Eine Möglichkeit ist, wie Du bereits vermutest, dass die Kodierung der Datenbank nicht passt. Diese sollte zum Script passen und ggf. geändert werden. Wenn das Script UTF-8 verwendet, sollten die Tabellen das am Besten auch.


    Du kannst versuchen die Kodierung der Tabellen zu ändern. Ich empfehle aber dringend, ein Backup zu machen und eine Testinstallation vorzunehmen und nur mit dieser zu arbeiten. Bei solchen Umwandlungsaktionen sind schnell mal Umlaute futsch und das sollte man daher testen.


    Wird bei dieser Fehlermeldung noch irgendwo angegeben in welcher Zeile vom Script der Fehler auftritt?

  • Hallo Andy,


    ich melde mich zurück.


    In der Datei:

    C:\xampp\mysql\bin\my.ini


    habe ich

    character-set-server=utf8mb4

    collation-server=utf8mb4_general_ci


    in

    #character-set-server=utf8mb4

    #collation-server=utf8mb4_general_ci

    geändert


    Das Problem mit den Umlauten und der Fehleranzeige beim Importieren der Preise konnte damit behoben werden.


    ----------------------------------------------------


    Die folgenden Fehler konnte ich wie folgt abstellen:

    ----------------------------------------------------


    1. Aufruf einer Artikel-Detail-Seite:


    1.1.

    Warning: Use of undefined constant replace - assumed 'replace' (this will throw an Error in a future version of PHP) in

    C:\xampp\htdocs\xxxxx\PHP\class_ProductDetail.inc.php on line 573


    Originalcode:

    $sNutzlaenge=str_replace(",", ".", $this->sFormValue_hiddenNutzlaenge.replace);


    geändert in:

    $sNutzlaenge=str_replace(",", ".", '$this->sFormValue_hiddenNutzlaenge.replace');


    Frage: Ist das so '...' OK?


    1.2.

    Warning: A non-numeric value encountered in

    C:\xampp\htdocs\xxxxx\PHP\class_ProductDetail.inc.php on line 574


    Originalcode:

    $iNutzlaenge=$sNutzlaenge * 1000; //mm


    geändert in:

    $iNutzlaenge=(int)$sNutzlaenge * 1000; //mm


    Frage: Ist das so (int)... OK?

    ----------------------------------------------------


    2. Artikel in den Warenkorb legen:


    2.1.

    Fatal error: Uncaught ArgumentCountError: Too few arguments to function CartEntry::__construct(), 6 passed in

    C:\xampp\htdocs\xxxxx\PHP\class_Cart.inc.php on line 342

    and exactly 7 expected in

    C:\xampp\htdocs\xxxxx\PHP\class_CartEntry.inc.php:32


    Fehler behoben auf der Seite

    C:\xampp\htdocs\xxxxx\PHP\class_CartEntry.inc.php:32


    Originalcode:

    function __construct($sProduktID, $sBasisArtikelNr, $sNutzlaenge, $iAmount, $aArticleData, $aArticlePriceData, $bVerwendeGuenstigstenStaffelpreis)


    geändert in:

    function __construct($sProduktID = null, $sBasisArtikelNr = null, $sNutzlaenge = null, $iAmount = null, $aArticleData = null, $aArticlePriceData = null, $bVerwendeGuenstigstenStaffelpreis = null)


    // mit " = null" --> Artikel-Datail-Seite wird angezeigt und Artikel, welche in den Warenkorb gelegt werden sind "sichtbar"

    // bei Aufruf des Warenkorbes wird alles richtig angezeigt


    2.2.

    Warning: A non-numeric value encountered in

    C:\xampp\htdocs\xxxxx\PHP\class_Kosten.inc.php on line 300


    Originalcode:

    $this->iVersand=$this->iDPDVersandkostenPreis + $iVersandkostenPauschalInsel;


    geändert in:

    $this->iVersand=(int)$this->iDPDVersandkostenPreis + (int)$iVersandkostenPauschalInsel;


    2.3.

    Warning: A non-numeric value encountered in

    C:\xampp\htdocs\xxxxx\PHP\class_Kosten.inc.php on line 510


    Originalcode:

    $this->iVersandkostenTeillieferung=$iGesamtkostenFuerTeillieferung + $iVersandkostenPauschalInsel;


    geändert in:

    $this->iVersandkostenTeillieferung=(int)$iGesamtkostenFuerTeillieferung + (int)$iVersandkostenPauschalInsel;


    2.4.

    Warning: A non-numeric value encountered in

    C:\xampp\htdocs\xxxxx\PHP\class_Kosten.inc.php on line 827


    Originalcode:

    $this->iGesamtNetto=$this->iWarenwert + $this->iBearbeitungspauschale + $sVersandkosten;


    geändert in:

    $this->iGesamtNetto=(int)$this->iWarenwert + (int)$this->iBearbeitungspauschale + (int)$sVersandkosten;


    ----------------------------------------------------


    3. Warenkorb


    3.1. PDF aufrufen ("Bestellung als PDF")

    Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; FPDF has a deprecated constructor in

    C:\xampp\htdocs\xxxxx\fpdf\fpdf.php on line 12


    Zeile 76

    Originalcode:

    function FPDF($orientation='P', $unit='mm', $size='A4')


    geändert in:

    function __construct($orientation='P', $unit='mm', $size='A4')


    3.2.

    Deprecated: Function get_magic_quotes_runtime() is deprecated in

    C:\xampp\htdocs\xxxxx\fpdf\fpdf.php on line 1054


    Originalcode:

    if(get_magic_quotes_runtime())

    @set_magic_quotes_runtime(0);


    geändert in:

    //if(get_magic_quotes_runtime())

    // @set_magic_quotes_runtime(0);


    Frage: Ist das so OK?


    Hinweis:

    if(get_magic_quotes_runtime())

    // @set_magic_quotes_runtime(0);

    @set_magic_quotes_runtime(false);

    ini_set('magic_quotes_runtime', 0);

    brachte keinen Erfolg

    -----------------------------------------------


    4. Bestellung versenden


    Ihre Bestellung konnte nicht gesendet werden.

    Alternativ können Sie ein PDF-Dokument erstellen und dieses per E-Mail oder Fax an uns senden. Dazu klicken Sie bitte im Warenkorb auf den Button 'Bestellung drucken'.


    !!! Es wird auch kein Kontaktformular versendet. !!!


    4.1.

    C:\xampp\php\php.ini

    ----------------

    [mail function]


    Originalcode:

    mail.add_x_header=Off


    geändert in:

    mail.add_x_header=On


    ?????????????????????????????????????


    4.2.

    C:\xampp\htdocs\xxxxx\PHPMailer


    Der Ordner PHPMailer enthält die Version:

    Software: PHPMailer - PHP email class |

    Version: 5.2


    Sollte oder muss ich die Version auf PHPMailer 6.1.7 anheben oder wo sollte ich ansetzen, damit die Mail's versendet werden?



    Danke


    Schöne Grüße


    Topinambur

    • Offizieller Beitrag

    Hallo,


    komme erst heute dazu mir das alles genauer anzuschauen:


    Code
    get_magic_quotes_runtime()

    Wenn es funktioniert, wenn Du die Sachen auskommentiert hast, dann lass es so.


    Wegen PHPMailer: die Version 6 funktioniert leider anders, so dass es nicht so einfach ist auf diese zu wechseln. Jetzt kommt es darauf an, wie die Mails verschickt werden (SMTP oder Mail). Es gibt auch eine Debug-Funktion:


    https://da-software.net/2020/0…rmmail-script-aktivieren/


    Wie erfolgt der Versand genau?


    Gruß

    Andy

  • Hallo Andy,


    der Versand erfolgt Local über SMTP und bei 1&1 über Sendmail.

    Nach Deiner Frage habe ich mir die Zugangsdaten noch einmal genauer angeschaut und einen Fehler gefunden.

    Jetzt funktioniert der Versand "Lokal", so wie ich es mir wünsche.

    Den Versand bei 1&1 kann ich noch nicht testen.



    Viele DANK für Deine Hilfe.


    Schöne Grüße


    Topinambur

  • Hallo Andy.


    eine Sache habe ich noch gefunden.

    In der Datei

    C:\xampp\htdocs\xxxIntern\nbproject\project.properties

    steht folgender Inhalt:


    include.path=${php.global.include.path}

    php.version=PHP_5

    source.encoding=ISO-8859-1

    src.dir=.

    tags.asp=false

    tags.short=true

    web.root=.


    Darf ich die Zeile 2 einfach in

    php.version=PHP_7.4

    ändern?


    Schöne Grüße


    Topinambur

    • Offizieller Beitrag

    Hallo,


    die Datei sieht mir nach einer Projekt-Datei der Entwicklungsumgebung aus:

    https://www.eclipse.org/pdt/he…hp_project_properties.htm


    Die hat für den Produktiveinsatz keine Bedeutung, von daher dürfte es egal sein. Die sagt nur der Entwicklungsumgebung, welche PHP-Version verwendet wird. Kannst Du abändern, aber für den Betrieb auf dem Server spielt dies keine Rolle.


    Gruß

    Andy

  • Die letzte Antwort auf dieses Thema liegt mehr als 365 Tage zurück. Das Thema ist womöglich bereits veraltet. Bitte erstelle ggf. ein neues Thema.

    • :)
    • :(
    • ;)
    • :P
    • ^^
    • :D
    • ;(
    • X(
    • :*
    • :|
    • 8o
    • =O
    • <X
    • ||
    • :/
    • :S
    • X/
    • 8)
    • ?(
    • :huh:
    • :rolleyes:
    • :love:
    • 8|
    • :cursing:
    • :thumbdown:
    • :thumbup:
    • :sleeping:
    • :whistling:
    • :evil:
    • :saint:
    • <3
    • :!:
    • :?:
    Maximale Anzahl an Dateianhängen: 10
    Maximale Dateigröße: 1 MB
    Erlaubte Dateiendungen: bmp, gif, jpeg, jpg, pdf, png, txt, zip

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!