Boardunity & Video Forum

Boardunity & Video Forum (https://boardunity.de/)
-   Programmierung und Datenbanken (https://boardunity.de/programmierung-datenbanken-f23.html)
-   -   eval()'d Code Fehler (https://boardunity.de/eval-d-code-fehler-t713.html)

Daniel Richter 02.09.2003 14:35

eval()'d Code Fehler
 
Moin Leute.
Ich versuch mich gerade an Template Ausgaben und habe da eine Funktion für geschrieben, die wiefolgt aussieht
PHP-Code:

function template($template) { 
 
$query = @mysql_query("SELECT templatecode FROM `template` WHERE templatename = \"$template\""); 
 while(list(
$templatecode) =  @mysql_fetch_row($query))  
 {
 return 
$template $templatecode;
 }
 } 

Nun habe ich meinen Template Code in meine DB gespeichert (wobei ich anmerken muss, dass der HTML Code auch " " enthällt). Abrufen tu ich die Templates dann mit
PHP-Code:

eval ("\$templatename = \"".template("header")."\";");
echo 
$templatename

Nun kommt bei dem header Template aber folgender Fehler
Zitat:

Parse error: parse error, unexpected T_STRING in /www/htdocs/dariweb/discussion/header.php(20) : eval()'d code on line 4
Ich sehe auch, dass es ein Parse Error ist, aber wo ist da denn bitte der Fehler? :o

exe 02.09.2003 14:41

Re: eval()'d Code Fehler
 
Du musst natürlich die Anführungszeichen escapen bevor du das Template durch eval() jagst.
Sieht dein Template nähmlich so aus

Dein Name ist "$username"

macht das via eval folgenden Ausdruck;

$templatename = "Dein Name ist "$username"";

Kann nicht funktionieren...

Abhiflfe gibts folgendermaßen:

Code:

eval ("\$templatename = stripslashes(\"".addslashes(template("header"))."\");");
echo $templatename;

D.h. vor dem evaluiren werden die Anführungszeichen escaped und gleich nach dem evaluieren wieder gestripped...

Daniel Richter 02.09.2003 14:45

jo stark! Hat geklappt! Danke ;)

exe 02.09.2003 14:51

Ich glaub ich hab dir da gerade einen kleinen Denkfehler eingebaut.
Den stripslashes() Aufruf kannst du auch weglassen da die Slashes die via addslashes() vor die Anführungszeichen gesetzt werden durch das evaluiren ja automatisch wieder wegfallen.
So müsste das richtiger Funktionieren:

Code:

eval ("\$templatename = \"".addslashes(template("header"))."\";");
echo $templatename;


Daniel Richter 02.09.2003 14:58

Zitat:

Original geschrieben von exe
So müsste das richtiger Funktionieren:

Kann etwas richtiger als richtig funktionieren? :)
Aber trotzdem danke :D

exe 02.09.2003 15:10

Zitat:

Original geschrieben von codemonkey
Kann etwas richtiger als richtig funktionieren? :)
Mein Schreibstil ist speziellerer Natur, ich weiss ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25