PHP eval unter PHP 7

  • Hallo
    nach dem update vom Server auf PHP 7 geht mein Programm nicht mehr.


    finde nicht was falsch ist.
    Bitte um Hilfe!

    Einmal editiert, zuletzt von Arne Drews (20. November 2018 um 14:25) aus folgendem Grund: MOD: Code-Tags eingesetzt

    • Offizieller Beitrag

    Wenn ich eval() sehe, kräuseln mir ja schon die Nackenhaare. Das solltest Du anders lösen.

    Was Dein Problem angeht, würde ich mal tippen, dass Du das

    PHP
    eval("\$games .= "".$this->template['game']."";");


    in etwa so abändern solltest

    PHP
    eval("\$games .= \"" . $this->template['game'] . "\";");


    Das sollte dann für alle eval()s gemacht werden.

  • Über eval() sagt man das

    Zitat


    [FONT=&quot]Achtung[/FONT][FONT=&quot]Das eval()-Sprachkonstrukt ist sehr gefährlich, weil es die Ausführung von beliebigem PHP-Code erlaubt. Seine Verwendung wird daher nicht empfohlen. Wenn sorgfältig überprüft wurde, dass es keine andere Möglichkeit gibt als dieses Konstrukt zu verwenden, ist besonders darauf zu achten keine von Nutzern bereit gestellten Daten zu übergeben ohne diese zuvor ordnungsgemäß zu validieren.[/FONT]

    Aber das nur nebenbei.
    Was sagt den überhaupt deine Error report

  • Leider kein Fehler
    unter PHP 5 war alles gut jetzt hat Server PHP 7
    und wenn ich eval jetzt ändere kommt Fehler :
    eval("\$games .= "".$this->template['game']."";");
    kommt der Fehler
    Parse error: syntax error, unexpected '"'

  • habe es so geändert
    $output = "";
    foreach($this->gamedata as $category){
    $games = "";
    $gamedata = "";
    if(count($category['games']) > 0){
    $count = 0;
    foreach($category['games'] as $game){
    if(($count % 2) == 1 || count($category['games']) == 1){
    eval("\$games .= "".$this->template['game']."";");
    eval("\$gamedata .= "".$this->template['gdoublewrapper']."";");
    $games = "";
    } else {
    eval("\$games .= "".$this->template['game']."";");
    }
    $count++;

    if(count($category['games']) != 1 && (count($category['games']) % 2) == 1 && ($count == count($category['games']))){
    eval("\$gamedata .= "".$this->template['gdoublewrapper']."";");
    }
    }
    eval("\$output .= "".$this->template['category']."";");
    }
    }
    return $output;
    }
    kopiert den flash nicht mit ist aber alles so geändert.
    eval("\$games .=\ "" . $this->template['game'] . "";");
    kein Fehler aber immer noch weißer Bildschirm

    6 Mal editiert, zuletzt von Bigberle (20. November 2018 um 19:00)

  • Ich weiß gerade nicht was ich sagen soll.

    Das liegt woh an dein "" .Kuck doch mal in post 2# wie @Arne Drews das da gemacht hat .So ist bei mir der Fehler nicht mehr da

    Den Fehler hat du jetzt in 5 Zeilen ( Hat mir sogar der ErrorReport angezegt nach und nach )
    Wenn die Fehler weg sind kommt noch ein Fehler das eine Klammer zu viel ist.
    Vieleicht hat sich die Klammer beim reinkopieren hier rein geschlichen oder so. Auf jedenfall ist die bei deinen geposteten Code jetzt zu viel.

    Wieso kopiert er den \ nicht mit ? Ist doch sonst überall zu sehen.
    Bist du sicher das dein ErrorReport aktiviert ist ? Kommt mir irgendwie nicht so vor

    • Offizieller Beitrag

    Ja denke das der ErrorReport aktiv ist
    error_reporting ( E_ALL );

    Nimm mal -1 und display_errors setzen, siehe #5

    der \ ist weg sobald ich auf antworten klicke.

    Dann verwende die PHP-Tags hier im Editor, dann verschwinden die nicht.

  • danke, hab ich jetzt hinbekommen

  • das mit eval hab ich hinbekommen, danke
    was ändert sich bei $var in PHP 7 das geht leider auch nicht

    • Offizieller Beitrag

    Wenn Du mit Klassen arbeitest, mache es bitte gleich richtig. Die Syntax oben bei Dir stammt aus PHP4 Zeiten, das ist seit August 2008, also bereits über 10 Jahre(!) tot.
    Als Beispiel für Dein Snippet oben:


    Auch global sollte man nicht verwenden, übergebe die Daten, die Du benötigst als Parameter an die Methoden, in diesem Fall den Konstruktor.

    Aufruf für obiges Beispiel:

    PHP
    // AdminMode:
    $Spiele = new Spiele( $templates, 1 );
    
    
    // default mode:
    $Spiele = new Spiele( $templates );
  • Danke Arne und Bandit
    ich mache das nicht so oft, nur wenn ich etwas bestimmte brauche suche ich mir das zusammen was die möchten.
    Mache das Ehrenamtliche für die Homepage der Freiwilligen Feuerwehr.