Mehrdimensionale Arrays & eval()

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von sunni, 30.08.2004.

  1. sunni

    sunni Thread Starter MacUser Mitglied

    Beiträge:
    761
    Zustimmungen:
    0
    MacUser seit:
    06.03.2002
    Servus,

    Hat jemand eine Ahnung, warum die PHP-Funktion eval() keine mehrdimensionalen Arrays verarbeitet?

    also z.b.:
    PHP:
    <?php

    $test
    [0]['test']="und zwar genau das!";
    $template="Hier steht jetzt mal kurz was: $test[0]['test']";

    eval(
    "echo \$template;");

    ?>
    Dann bekomme ich als Ausgabe:
    Hier steht jetzt mal kurz was: Array['test']

    Hat da jemand eine Ahnung, wie ich die mit eval() korrekt ausgeben kann?


    Bin für jede Hilfe dankbar :)

    lg
    sunni
     
    Zuletzt bearbeitet: 30.08.2004
  2. Artaxx

    Artaxx MacUser Mitglied

    Beiträge:
    6.087
    Zustimmungen:
    174
    MacUser seit:
    25.03.2004
    Ich würde auf eine Referenz tippen. Check mal die Quotes. Ich hab zwar nur Ahnung von Perl (und davon nicht viel), aber ich denke es ist ein einfacher Aufruf Fehler !!

    Gruss
    Artaxx
     
  3. sunni

    sunni Thread Starter MacUser Mitglied

    Beiträge:
    761
    Zustimmungen:
    0
    MacUser seit:
    06.03.2002
    PHP:
    <?php

    $test
    [0]="und zwar genau das!";
    $template="Hier steht jetzt mal kurz was: $test[0]";

    eval(
    "echo \$template;");

    ?>
    Dann bekomme ich als Ausgabe:
    Hier steht jetzt mal kurz was: und zwar genau das!


    Hmm Artaxx,
    Warum gibt eval() den String dann bei eindimensionalen Arrays korrekt aus und bei den anderen nur ein Array['test']?

    Ich gehe auch von einem Aufruffehler aus. Nur an welcher Stelle. :(
     
  4. Nogger

    Nogger MacUser Mitglied

    Beiträge:
    367
    Zustimmungen:
    0
    MacUser seit:
    03.08.2004
    Wenn du print($template); ausführst, wirst du das selbe Ergebnis bekommen. Hat also nichts mit eval() zu tun. Weil ein String in Anführungszeichen bereits Variablen expandiert.

    Und bei der Expansion erkennt php die zweite Dimension nicht. ${test[0]['test']} sollte gehen.

    Wobei mir völlig schleierhaft ist, warum du eval() benutzt statt einfach print() zu benutzen. Ersteres ist zudem im Zusammenhang mit Userdaten ein potentielles Sicherheitsproblem.
     
  5. sunni

    sunni Thread Starter MacUser Mitglied

    Beiträge:
    761
    Zustimmungen:
    0
    MacUser seit:
    06.03.2002
    Hallo Nogger,

    Das Problem ist, daß das Template aus einer Datenbank kommt. Der ausgelesene Text enthält diverse Variablen, die durch eval(); gegen den Variablenwert ersetzt werden. (Ich glaube das meinst du mit expandieren.) Mit eval() kann man PHP-Code, der in einer Variable vorliegt, ausführen.

    Klar birgt eval() sehr sehr viele Gefahren, die ich vorher noch entschärfen muß, bevor ich die Seite aktualisiere. Einen Hinweis auf die Gefahren hab ich auch auf http://www.dclp-faq.de gefunden.

    Bei print werden diese nicht ersetzt. Hab ich eben ausprobiert.


    Ein ähnliches Prinzip verwendet übrigens dieses Forum hier. Der eigentlich HTML-Inhalt wird aus der Datenbank ausgelesen, die Variablen mit eval(); ersetzt und der Text ausgegeben.

    Hmm, schaut so aus, als ob ich die ganze Array entfernen muß. :(

    lg
    sunni :)
     
  6. aguilera

    aguilera MacUser Mitglied

    Beiträge:
    48
    Zustimmungen:
    0
    MacUser seit:
    09.03.2004
    <?php
    $test[0]["test"] = "und zwar genau das!";
    $template='Hier steht jetzt mal kurz was:'. $test[0]["test"];

    eval('echo $template;');
    ?>

    Sollte es tun. Zumindest bei mir. Assoziative Arrays in Strings nerven meistens. Deswegen besser Strings zusammenfügen.

    Btw: wenn schon Templates, warum nicht gleich richtig? Z.B. smarty? Wir setzen das gerade in einem größeren Projekt ein. Ist richtig angenehm!

    Grüße
    agui
     
Die Seite wird geladen...

Diese Seite empfehlen