Nei record del database si possono inserire e richiamare istruzioni PHP?

Ciao ragazzi, avrei creato un sistema molto primitivo e rozzo per una gestione di template per un CMS che sto scrivendo. La struttura è la seguente:

Nella pagina da visualizzare vengono richiamate pagine php in questo modo (prendiamo per esempio la home):

<?php

require('templates/header.php');
require('templates/index.php');
require('templates/footer.php');
?>

Dentro ognuna di queste 3 pagine, c'è un richiamo a una query su una tabella del database creata appositamente da me. Dentro questa query c'è il codice. Vi faccio un esempio. Per "header.php" ho scritto questo codice:

<?php

 include("connessione_db.php"); 
 
 include("config.php"); 

 mysql_select_db("$db_name",$connessione); 

     $result= mysql_query("SELECT * FROM template_header");
 
       if (!$result) {
 
           exit ('<p> Errore mentre recuperavo i dati' . mysql_error() . '</p>');
 
                }
                
   while ($template= mysql_fetch_array($result))  
 
   {
      
     echo " ".$template['template']." " ;
 
   }

?>

E nella tabella "template_header" c'è un campo con id 1 e template con il codice dell'header, che sarebbe codice HTML.


Ho usato questo sistema, così dall'admincp creato da me, da una pagina puoi modificare i record di questa tabella, e quindi modificare il template.

Funzionava tutto alla perfezione, fin quando non ho provato a inserire un codice PHP. La fine! Si vede ma formattato, il server non lo interpreta! Ora, vi chiedo: Ma si può inserire un codice PHP in una query e richiamarlo con la speranza che venga interpretato?

Se no, come posso creare un sistema di template personalizzabili in PHP (e se necessaio MySQL)?


Grazie mille per la vostra attenzione!

inviato 4 anni fa
Clear
Clear
21
modificato 4 anni fa
Gianni Tomasicchio
X 0 X

Il codice html recuperato dal DB non viene interpretato poiché usi l'istruzione echo per stamparlo. Se invece utilizzi eval() le istruzioni PHP contenute nel codice verranno eseguite:

<?php
// semplice stampa della stringa
echo '<b>Oggi è il giorno <?=date(\'d/m/y\')?></b>';

// esecuzione della stringa
eval('?>' . '<b>Oggi è il giorno <? echo date(\'d/m/y\')?></b>');

Fai attenzione al fatto che ciò che eval si aspetta è del codice PHP, pertanto ho fatto precedere la riga di HTML con la chiusura del tag PHP ('?>'). In questo modo eval non parte subito con l'interpretazione del codice PHP ma aspetta la riapertura del tag <? per eseguire nuove istruzioni PHP.

risposto 4 anni fa
Gianni Tomasicchio
Sei stato gentilissimo, ogni volta mi dai supporto completo con molta pazienza.. Se potessi (non ho ancora abbastanza reputazione) ti darei reputazione! Grazie mille!Clear 4 anni fa
@Clear L'hai fatto quando hai accettato la mia risposta!Gianni Tomasicchio 4 anni fa
X 0 X X
Effettua l'accesso o registrati per rispondere a questa domanda