Newsgroup: it.comp.www.php
Titolo: [eval] - errore, non ne vengo a capo

Sto seguendo un esempio di freephp per cercare di fare un templating se 
pur spartano, ma senza template engines.
$ModName è una variabile che viene passata alla funzione, e che arriva 
in maniera corretta...
Il codice è:
eval("myblog_admin_Stampa(\"".myblog_admin_GetTemplate("modules/$ModName/templates/admin.html")."\");"); 
function myblog_admin_GetTemplate($template) {
	return str_replace("\"","\\\"",implode("",file($template)));
}
function myblog_admin_Stampa($template) {
	echo $template;
}
L'errore è:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or 
`T_NUM_STRING' in 
d:\easyphp1-7\www\sviluppo\modules\myblog\admin.php(27) : eval()'d code 
on line 10
N.B. se uso la sintassi
eval("myblog_admin_Stampa(\"".myblog_admin_GetTemplate("modules/\"$ModName/templates/admin.html")."\");");
non mi viene stampato nulla. Da cosa dipende? grazie

 code on line 10
Fai un passo alla volta ed utilizza gli apici singoli per non dover
inserire i caratteri di escaping.
Inizia facendo un print della stringa che vuoi passare ad eval e
verifica che sia corretta prima di provare ad "eseguirla".
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 verifica che sia corretta prima di provare ad "eseguirla".
la string aè giusta.
la funzione GetTemplate mi sputa fuori l'html giusto
il resto lo verifico più tardi con apici singoli magari :D
per ora grazie, devo scappare mannaggia alle donne :(
Ciao

 la funzione GetTemplate mi sputa fuori l'html giusto
E' solo HTML o e' una stringa PHP corretta (completa di escaping)?
-- 
I am what I am, I do what I can


Setec Astronomy ha scritto:
 > Movie Maniac® wrote:
 >
 >
 >> la funzione GetTemplate mi sputa fuori l'html giusto
 >
 >
 >
 > E' solo HTML o e' una stringa PHP corretta (completa di escaping)?
il template è :
<table style="border:1px solid #FF0000;">
   <tr>
     <td> $admin['menu']</td>
   </tr>
   <tr>
     <td>$admin['formstart']</td>
   </tr>
   <tr>
     <td>$admin['title']</td>
   </tr>
   <tr>
     <td>$admin['text']</td>
   </tr>
   <tr>
     <td>$admin['lang']</td>
   </tr>
   <tr>
     <td>$admin['submit']</td>
   </tr>
   <tr>
     <td>$admin['formend'] </td>
   </tr>
</table>
la funzione GetTemplate invece, mi restisce lo stesso con gli slash...
in sostanza invece di
style="border:1px solid #FF0000;"
mi restituisce
style=\"border:1px solid #FF0000;\"
prima parlavi di apici singoli. Vuoi dire che nell'html devo utilizzare 
per gli attributi gli apici singoli anzichè quelli doppi?

 utilizzare per gli attributi gli apici singoli anzichè quelli doppi?
IMHO ti stai complicando molto la vita:
<?php 
// $content = file_get_contents ('template.htm');
$content  = 'hello $admin[myname], welcome $admin[mycity]';
$admin['myname'] = 'setec';
$admin['mycity'] = 'sealand';
eval ('echo ("' . addslashes ($content) . '");'); 
?>
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E


 ?>
Il guaio è che ho bisogno di avere un template html separato dal php
qui vedo la prima riga di codice commentata. è un errore o è proprio così?
grazie

 ?>
vediamo un pò, se posso rompere ancora:
TEMPLATE
<table style="border:1px solid #FF0000;">
   <tr>
     <td> $admin['menu']['html']</td>
   </tr>
   <tr>
     <td>$admin['formstart']['html']</td>
   </tr>
   <tr>
     <td>$admin['title']['html']</td>
   </tr>
   <tr>
     <td>$admin['text']['html']</td>
   </tr>
   <tr>
     <td>$admin['lang']['html']</td>
   </tr>
   <tr>
     <td>$admin['submit']['html']</td>
   </tr>
   <tr>
     <td>$admin['formend']['html']</td>
   </tr>
</table>
ESEMPIO DI VARIABILI
$admin['title']['label'] = _TITLE;
$admin['title']['html']  = "<input type='text' size='55' name='title'>";
$admin['text']['label']  = _TEXT;
$admin['text']['html']   = "<textarea cols='52' rows='10' name='text' 
id='text'></textarea>";
$content = file_get_contents ('template.html');
eval ('echo ("' . addslashes ($content) . '");');
ERRORE OTTENUTO:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or 
`T_NUM_STRING' in 
d:\easyphp1-7\www\sviluppo\modules\myblog\admin.php(39) : eval()'d code 
on line 4
io sto a impazzì :(
Grazie per l'aiuto in ogni caso.

 $admin['mycity'] = 'sealand';
ho provato anche a giocare con gli apici utilizzando le variabili così 
nel template
$admin[myname]
e così nel php
$admin['myname']
ma nulla.
Invece sono riuscito ad ottenere un risultato cambiando i nomi alle 
variabili come segue
$admin_myname
desiderando però avere un array, per ragioni di praticità, come mi 
dovrei omportare?
Grazie

 io sto a impazzì :(
Riguarda il mio codice, come ho scritto le variabili nel template?


 così?
La prima riga e' commentata per il semplice fatto che, per evitare che
postassi un messaggio tipo "ma non mi trova il file", l'ho sostituita
con la seconda riga, il risultato e' identico, ma se tu pensi che sia
diverso forse e' il caso che lasci perdere e ricominci studiandoti le
basi.
-- 
I am what I am, I do what I can


 ma nulla.
Fa una cosa, ricomincia con le basi, capitolo Stringhe:
<?php 
$test['first']['second'] = 'this is a test';
// Parse error:
// echo ("the variable contains: $test['first']['second']"); 
// the variable contains: Array[second]:
// echo ("the variable contains: $test[first][second]");
// Notice: Use of undefined constant first - assumed 'first' 
// Notice: Use of undefined constant second - assumed 'second' 
// echo ("the variable contains: {$test[first][second]}"); 
echo ("the variable contains: {$test['first']['second']}"); 
?>
-- 
I am what I am, I do what I can


 basi.
mai detto questo. La mia domanda nasceva dal fatto che avevi detto: "ti 
stai complicando troppo la vita", e non so perchè avevo pensato volessi 
dirmi di lasciar perdere i templates.

 Riguarda il mio codice, come ho scritto le variabili nel template?
$content  = 'hello $admin[myname], welcome $admin[mycity]';
invece io nel mio (file html esterno) alla fine le ho scritte così, e 
ora funziona...
{$admin['menu']['html']}

 Fa una cosa, ricomincia con le basi, capitolo Stringhe:
BINGO!!!
Come mi hai consigliato, sono andato a rileggermi il capitolo 6 del 
manuale php compilato in chm che ho sempre con me, ed ecco il sirultato 
finale :)
function myblog_admin_GetTemplate($template) {
      return str_replace("\"","\\\"",implode("",file($template)));
}
function myblog_admin_Stampa($template) {
      echo $template;
}
$admin['title']['label']= _BLOGTITLE;
$admin['title']['html'] = "<input type='text' size='55' name='title'>";
	eval("myblog_admin_Stampa(\"".myblog_admin_GetTemplate("modules/myblog/templates/admin.html")."\");");
<table width='100%'>
   <tr>
     <td>{$admin['title']['label']}</td>
	<td>{$admin['title']['html']}</td>
   </tr>
</table>
Chiedo scusa per averti fatto perdere del tempo, ma si sa che la fretta 
è cattiva consigliera!
Grazie comunque per la tua totale disponibilità!
Ciao