Mehrdimensionale Arrays & eval()

S

sunni

Aktives Mitglied
Thread Starter
Dabei seit
06.03.2002
Beiträge
769
Reaktionspunkte
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
 
Zuletzt bearbeitet:
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
 
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. :(
 
sungeri schrieb:
Dann bekomme ich als Ausgabe:
Hier steht jetzt mal kurz was: Array['test']

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.

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

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.
 
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 :)
 
<?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
 
Zurück
Oben Unten