Hello Sacha,
wahrscheinlich reden wir gerade aneinander vorbei, aber ich habe das jetzt bei mir so hingebastelt, dass es geht. Erläuterung kommt dann heute Abend.
Wenn Du testen willst:
Leg Dir eine Tabelle mit dem Namen DYNFUNC an mit den Feldern:
ID unsigned int primary autoincrement
FUNC text
Und hier der Code:
<?php ### dyn_func.php ###
error_reporting(E_ALL);
bitte username und Passwort anpassen:
$con = mysql_connect('localhost','thomas','thomas') or die('keine Serververbindung möglich');
bitte Datenbankname anpassen:
$db = mysql_select_db('thomass',$con) or die('kann Datenbank nicht öffnen');
hier werden die Funktionen definiert
$string = "echo '<a href=\"'.basename($_SERVER['PHP_SELF']).'?id=1\">News</a><br />';";
echo "String: ".nl2br(htmlentities($string))."<br />\n";
Die Variable ($_) muss maskiert werden, da sie ja erst zur Ausführungszeit mit eval() ersetzt werden soll durch den dann geltenden Wert.
Die " müssen doppelt maskiert werden, da ja der Backslash auch in die Datenbank soll
$upd_string = mysql_escape_string($string);
echo "escaped String: ".nl2br(htmlentities($upd_string))."<br />\n";
An die MySQL-Schnittstelle muss ein escaped String übergeben werden
$sql = "insert into DYNFUNC set FUNC = '$upd_string'";
mysql_query($sql,$con) or die('kann insert nicht durchführen: '.htmlentities(mysql_error()));
$sql = "select FUNC from DYNFUNC where ID = ".mysql_insert_id();
$res = mysql_query($sql,$con) or die('kann Abfrage nicht durchführen: '.htmlentities(mysql_error()));
if($res)
{
$_rec = mysql_fetch_assoc($res);
$string = $_rec['FUNC'];
in $string sollte jetzt ++echo '<a href="' . basename($_SERVER['PHP_SELF']) . '?id=1">News</a><br />++ drinstehen. (++ sind meine Hilfshäkchen für die Darstellung)
das lassen wir uns jetzt mal ausgeben zur Kontrolle:
echo "String aus DB: ".nl2br(htmlentities($string))."<br />\n";
und dann mit eval ins Script holen und ausführen:
eval ($string);
echo nl2br(htmlentities($php_errormsg));
}
?>
Viel Spass noch
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau