eval() funktioniert nicht so wie gewünscht, wie geht es sonst?
Michael Vogel
- php
Hi!
Ich hatte schon einmal vor ein paar Tagen gefragt. Ich hab' das folgende Phänomen:
Ich habe ein System zusammengebastelt, in dem die HTML-Seiten aus einer Datenbank kommen, d.h. in der mySQL-Datenbank steckt der HTML-Code in einer Textvariablen.
Das funktioniert wirklich prima und sehr schnell - mal sehen, wie es sich im Echteinsatz bewährt.
Aber: Es sollen auch ein paar "Nettigkeiten", wie z.B. Zählerausgaben geben. Dazu muß ich allerdings auch aktiven Code in die HTML-Seiten bringen.
Mir wurde geraten, "eval" zu nutzen, jedoch bringt er Fehler, er scheint z.B. soetwas wie "eval('print "hallo"')" nicht zu können...
Welche Wege bleiben mir?
a) Ich leite die Daten der Seite aus der Datenbank in eine "echte" Datei und füge sie per include ein.
b) Auf die Daten, die in eine echte Datei ausgelagert wurden (zur Laufzeit), wird per "moved temporarily" verwiesen.
Nur wie stelle ich sicher, daß die ganzen temporären Dateien gelöscht werden?
Gibt es da schon fertige Denkkonzepte?
Danke!
Michael
Hi,
Mach es doch etwas einfacher,
Du schreibst deine Daten in die Mysql Datenbank, rufst sie mit php ab, generierst daraus den Html-Code mit Counter und dynamischen Sachen und schickst den dann weg.
Sollte eigentlich kein Problem sein, oder ?
Ich habe mal ein Forum so kreiert, das du dir gerne unter http://www.devalco.xodox.com anschauen kannst.
Viel Spaß
Gruß
Bernhard
Hi!
Du schreibst deine Daten in die Mysql Datenbank, rufst sie mit php ab, generierst daraus den Html-Code mit Counter und dynamischen Sachen und schickst den dann weg.
Sollte eigentlich kein Problem sein, oder ?
Das Problem ist, daß ich nicht den HTML-Code in der Datenbank erzeuge. Das sind meine Kollegen, die Dreamweaver verwenden. Ich kann denen vielleicht beibringen, gewisse PHP-Statements einzubauen, das ist aber auch alles.
Das Design wird von den Jungs gemacht, mein System gibt lediglich den Rahmen dazu ab.
Ich habe mal ein Forum so kreiert, das du dir gerne unter http://www.devalco.xodox.com anschauen kannst.
Oder nicht:
Error
Es ist folgender Fehler aufgetreten:
Konnte nicht Connecten. Bitte webmaster@xodox.com benachrichtigen.
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
Tschau!
Michael
Hi Michael!
Mir wurde geraten, "eval" zu nutzen, jedoch bringt er Fehler,
welche ?
er scheint z.B. so etwas wie "eval('print "hallo"')" nicht zu können...
doch kann er, hier müsste es z.b.:
eval('print "hallo;"');
heissen, evtenuell auch mal: eval("print "ich bin eine $zahl die ausgewertet wird";");
Im Gegensatz zu JavaScript haben einfache und doppelte Anführungszeichen eine
unterschiedliche Bedeutung.
Bei Datenbanken wird auch gerne stripslashes(); bzw, addslashes(); vergessen, zu wenig, zu oft
oder in asymetrischer Anzahl verwendet. (Dazu kommen noch die 'smartslashes' die ab und an
mal welche reinbauen oder wegnehmen.)
Schreibe deinen String, den du eval(); uieren möchtest am besten in eine Variable und gib die
'testhalber' mit
echo nl2br(htmlentities($VariableFuerEval));
aus.
Da muss dann gültiger php-Code stehen. Inclusive aller Semikolons und alle "strings "richtig" ge-slash-t".
Welche Wege bleiben mir?
Der weg mit eval(); scheint mir der richtige.
Wenn du nur wenige einfache Funktionen einbauen willst, kannst du dir natürlich auch selber was
stricken, z.B. so:
$html_seite=seite_aus_daten_bank_holen();
$html_seite=str_replace("<!-- DATUM -->",date("d.m.Y, g:i:s"),$html_seite);
$html_seite=str_replace("<!-- IP -->",getenv("REMOTE_ADDR"),$html_seite);
/* ... vielleicht noch ein paar sinvolle sachen :-) ... */
echo $html_seite;
setzt überall wo <!-- DATUM --> im Quelltext steht das aktuelle Datum ein, und überall wo
<!-- IP --> steht die aktuelle IP des Besuchers.
Gruss,
Carsten
Hi,
*grmbl* so natürlich nicht:
eval('print "hallo;"');
sondern:
eval('print("hallo");'); // so
eval("print("ich bin eine $zahl die ausgewertet wird");"); // und so
im Gegensatz zu echo ist print(); ne Funktion und will die Klammern.
(also eval('echo "hallo";'); geht)
Gruss,
Carsten