php Funktion eval

bauchinj

Erfahrenes Mitglied
Hallo!

Ich bin mir nicht ganz sicher, was eval() macht...
Verwende diese Funktion, um Werte (kommen aus db) in php zu verwenden, wobei diese Werte entweder Strings oder PHP-Funktionen enthalten können. Hat ja alles super funktiuoniert, bis ich einen Wert aus der DB ausgelesen habe, der ein Leerzeichen enthält..... also, der Wert der an die Funktion übergeben wird sieht so aus:

PHP:
eval( '$var = '.$value.';' );

wobei in $value zB "hallo Welt!" steht. Ich bekomme die Meldung 'unexpected T_STRING...

Danke für eure Hilfe!
 
Hallo,

ich hoffe du weißt dass eval() eine mächtige Waffe sein kann und du diese am Besten gar nicht verwenden solltest. Vorallem bei Daten aus der DB wo du nicht weißt, was es ist. Des weiteren kostet es brutal viel Zeit den Code zu interpretieren, vorallem weil da eventuell laufende Optimierer und Caches nichts machen können.

eval() führt den übergebenen String wie PHP-Code aus. In deinem Beispiel fehlen da die Anführungszeichen für den Wert bei der Variablenzuweisung:
PHP:
eval( '$var = "'.$value.'";' );

Ohne Anführungszeichen versucht der Interpreter folgendes auszuführen:
$var = Hallo Welt;
Dies gibt dann den von dir beschriebenen Fehler.

Warum machst du das eigentlich? Könntest ja auch genauso gut so schreiben, dann brauchst keine Anführungszeichen:
PHP:
$var = $value;

Abschließend noch ein Zitat, das mir spontan einfällt:
When eval() is the answer, you're probably asking the wrong question.

Und noch was zum nachlesen:
eval() im PHP-Handbuch

Gruß
BK
 
Hallo Bratkartoffel!

Danke erstmal für deine Ausführungen.

Ich kann leider $var = $value nicht nützen, da ev. $value = array(1,2,3) sein kann...
 
bauchinj hat gesagt.:
Ich kann leider $var = $value nicht nützen, da ev. $value = array(1,2,3) sein kann...
Dann kannst du die Lösung von Bratkartoffel auch nicht nutzen.
Du musst für $value einen String abelgen, der so im Code verwendet werden kann. Ein Funktionsaufruf, ein Wert (bei Strings in ") etc.

Mögliche Inhalte:
array(1,2,3)
"Hallo Welt"
trim(" Hallo ")
time()
 
Zurück