Hello,
ist eigentlich nicht schwer zu verstehen, was Du willst. Du willst die Stringauswertung erst zur Laufzeit des Programms (Scripts) durchführen.
Da warst Du mit eval() schon gar nicht so falsch. Eval ist eigentlich auch keine Funktion, sondern eine Compiler- (bzw. hier besser Parser)-Anweisung. Der im Argument übergebene Code wird bei Aufruf so in das Script übernmommen, als stüde er genau an der Stelle des Aufrufes. Das sit wichtig zu wissen, denn dadurch kann man sich sowohl Variablen kaputtschreiben als auch Redefine-Fehler (für Funktionen) auslösen.
Das mit den Funktionen kann man leider (noch) nicht verhindern, aber die Variablen des Scriptes kann man schützen, indem man eval() nochmals in einer Hüllfunktion kapselt. Dieser übergibt man dann nur DIE Adressen von Variablen oder Werte von Variablen, mit denen tatsächlich gearbeitet werden soll.
Nun stell Dir bitte vor, du hättest da Dein Script:
...
$a = 27;
$i = "denkste Paul<br>";
...
$var = "($i == 1) OR ($i == 2) OR ($i == 3);"
eval($var);
if ($fragezeichen)
{
echo "blah";
}
...
Nun nächster Denkschritt. Wir führen das eval in Gedanken durch:
...
$a = 27;
$i = "denkste Paul<br>";
...
$var = "($i == 1) OR ($i == 2) OR ($i == 3);"
($i == 1) OR ($i == 2) OR ($i == 3);
if ($fragezeichen)
{
echo "blah";
}
...
Siehst Du nun, wo es kneift?
Die Ergenisse der Vergleiche versichern einfach.
Also nochmal:
...
$a = 27;
$i = "denkste Paul<br>";
...
$var = "($i == 1) OR ($i == 2) OR ($i == 3);"
eval("$fragezeichen = (".$var.");");
if ($fragezeichen)
{
echo "blah";
}
...
Nun packen wir das mal aus:
...
$a = 27;
$i = "denkste Paul<br>";
...
$var = "($i == 1) OR ($i == 2) OR ($i == 3);"
$fragezeichen = (($i == 1) OR ($i == 2) OR ($i == 3));;
besser zwei Semikolen zum Zeilenabschluss als gar keins!
if ($fragezeichen)
{
echo "blah";
}
...
Wie Du siehst, ist nun ein vollständiger Verglich entstanden, der ausgewertet werden kann.
Ist es das, was Du wolltest?
Grüße
Tom