Mehrdimensionale Arrays & eval()

  1. sunni

    sunni Thread StarterMacUser Mitglied

    Mitglied seit:
    06.03.2002
    Beiträge:
    761
    Zustimmungen:
    0
    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
     
    sunni, 30.08.2004
  2. Artaxx

    ArtaxxMacUser Mitglied

    Mitglied seit:
    25.03.2004
    Beiträge:
    6.096
    Zustimmungen:
    174
    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
     
    Artaxx, 30.08.2004
  3. sunni

    sunni Thread StarterMacUser Mitglied

    Mitglied seit:
    06.03.2002
    Beiträge:
    761
    Zustimmungen:
    0
    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. :(
     
    sunni, 31.08.2004
  4. Nogger

    NoggerMacUser Mitglied

    Mitglied seit:
    03.08.2004
    Beiträge:
    367
    Zustimmungen:
    0
    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.
     
    Nogger, 31.08.2004
  5. sunni

    sunni Thread StarterMacUser Mitglied

    Mitglied seit:
    06.03.2002
    Beiträge:
    761
    Zustimmungen:
    0
    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 :)
     
    sunni, 31.08.2004
  6. aguilera

    aguileraMacUser Mitglied

    Mitglied seit:
    09.03.2004
    Beiträge:
    48
    Zustimmungen:
    0
    <?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
     
    aguilera, 31.08.2004
Die Seite wird geladen...
Ähnliche Themen - Mehrdimensionale Arrays eval()
  1. Lior
    Antworten:
    1
    Aufrufe:
    2.228
    purzele
    08.03.2013
  2. martinibook
    Antworten:
    16
    Aufrufe:
    816
    TheRocco85
    09.12.2008
  3. Seiler
    Antworten:
    2
    Aufrufe:
    2.623
  4. max@hismac
    Antworten:
    1
    Aufrufe:
    1.548
    only2me
    14.05.2007
  5. 2nd
    Antworten:
    6
    Aufrufe:
    635