2010-05-16 7 views
1

Je travaille sur un site qui traite avec beaucoup de textes en HTML, si récemment j'ai appris PHP et les déplacés dans une base de données MySQL et echo le contenu donné un chapitre et section spécifique. Maintenant, cela fonctionne relativement bien, le HTML s'affiche correctement. Cependant, dans certaines parties, j'ai inclus des appels de fonction PHP, et ceux-ci ne semblent pas être évalués - ils sont plutôt simplement insérés dans le code source (et donc invisibles pour la visionneuse de pages), ne faisant jamais rien. Ils ont fonctionné quand ils étaient de simples fichiers .html.Echo html + php base de données

Comment puis-je résoudre ce problème?

Par exemple, un texte peut ressembler à ceci:

<?php printChapterName(); ?> 
<p>Some text</p> 
... 
<?php showImage($name, $alt-text); ?> 
... 

Cela montre simplement le texte sur la page.

Edit: Les fonctions sont l'écho: ing du code HTML.

Répondre

1

Eh bien, vous l'écho de ces appels, c'est pourquoi ils sont écrits et non interprétées.

Je vous devriez repenser la regardez-façon que vous enregistrez votre texte dans la base de données. Pourquoi utiliser showimage($name) lorsque vous pouvez simplement stocker un tag <img>? Si les images sont placées aux mêmes endroits dans toutes les pages (par exemple si vous avez une image associée à chaque page), créez une autre colonne avec img src dans votre tableau et affichez l'image à sa place avec un autre appel PHP.

Par exemple, quelque chose sur les lignes de (ce qui est un exemple grossier, mais vous voyez l'idée):

$res = mysql_query("SELECT text, image FROM contents WHERE id_pag = ".$id); 
$row = mysql_fetch_array($res); 
// Output the image 
echo '<img src="'.$row['image'].'" />'. $row['text']; 
+0

je l'ai fait la fonction de sorte qu'il serait un raccourci pour les deux centrage et y compris le chemin où je sauverais les images, de sorte que si jamais je changé à l'avenir, je n'a pas eu à passer par chaque page individuellement. Cela semble être une idée intéressante, mais la plupart des pages n'ont pas d'images, et certaines ont deux, etc. –

+0

+1 pour repenser la conception db. Code de stockage et/ou le balisage dans la base de données est une décision très pauvre et – knittl

+0

intrinsèquement dangereux @ pg-Robban: Eh bien, il est difficile de vous donner une solution précise ne pas savoir exactement ce que vos pages ressemblent ... mais une option serait de enregistrez les images sous la forme '[img] images/test.jpg [/ img]'. Lorsque vous récupérez le texte, vous utilisez juste 'preg_replace' pour changer' [img] xxx [/ img] 'en' 'ou quelque chose comme ça. – nico

1

Utilisez eval() pour que PHP évalue le code provenant de votre base de données. Notez que ceci est intrinsèquement dangereux sauf si vous êtes la seule personne responsable de ce code PHP. Assurez-vous également que ces fonctions sont définies dans votre page actuelle.

+1

Soyez très prudent en utilisant' eval', cela peut mener au désastre. Comme je l'ai dit, repensez le stockage de votre contenu, cela peut prendre plus de temps mais vous aurez un produit plus propre à la fin. – nico

+0

Eval est dangereux mais en termes de réponse à la question alors c'est la bonne réponse – robjmills

2

Celui-ci devrait faire ce que vous voulez: (fonction evalInlinePHP et l'utiliser dans preg_replace_callback)

$text = "<?php printChapterName(); ?> <p>Lorem ipsum</p>"; 
function printChapterName(){ echo '<h1>Chapter #1</h1>'; } 

function evalInlinePHP($m) 
{ 
    ob_start(); 
    eval($m[1]); 
    return ob_get_clean(); 
} 

echo preg_replace_callback("/<\?php(.*)\?>/", 'evalInlinePHP', $text); 
//prints <h1>Chapter #1</h1> <p>Lorem ipsum</p> 

Mais s'il vous plaît noter qu'il est pas une bonne très mauvaise idée de stocker php fonction dans DB, puis l'évaluer. Vous devriez vraiment repenser la façon de stocker et afficher ces textes

+0

La fonction elle-même n'est pas stockée dans la base de données, seulement les appels. Est-ce toujours une mauvaise idée? –