Ich hab den entscheidenden Fehler gefunden, nachdem Maumau mir den kompletten Code gegeben hat. Es lag überhaupt nicht am eval() sondern an folgendem if:
Code:
$php = $ds->php;
if ($php == 0) {
    echo $selected_page;
} else {
    eval($selected_page);
}
Es wurde immer echo $selected_page; ausgeführt werden, da ein String in PHP immer == 0 ist und Daten die man per mysql_* abruft immer Strings sind, unabhängig davon welchen Typ sie in der MySQL-Datenbank besitzen. Lösung ist einfach $php typ-sicher mit === "0" zu vergleichen. Also im Endeffekt:
Code:
if ($php === "0") {
    echo $selected_page;
} else {
    eval($selected_page);
}
Alternativ müsste man auch $php am Anfang zu int casten können und dann mit == 0 vergleichen, hab ich jetzt nicht ausprobiert. Das wäre dann vorher einfach $php = (int)$ds->php;

P.S.: 1TBS sucks.