Forum de discussions pour les webmasters et les web developpeurs. (PHP, SQL, XHTML, JavaScript, Référencement, Positionnement,...)
Vous n'êtes pas identifié.
Salut
,
Question du jour:
Je souhaite pouvoir enregistrer du code php en plus de mes données habituelles en base de donné et que le code soit interprété ensuite dans la page en sortie. Sur mes testes, soit le code comme une simple include est interprété comme du texte et ne s'affiche pas sauf dans le code source de la page et pour du code plus complexe, celui ci est complètement bouffé.
J' ai regardé et tenté avec la fonction eval() mais sans grand succès.
J'ai essayé une autre methode qui consiste à enregistrer le nom de l'include en bd et de l'afficher par cette intermédiaire:
<?php
$nom_include=$page['nom_de_l_include'];
//on verifie si le fichier inclue est bien sur le serveur et on l'affiche
if (!file_exists(dirname(__FILE__) . '/' . $nom_include)) die("<b>Erreur dans la page. L'include demandé n'existe pas!</b>");
include_once(dirname(__FILE__) . '/' . $nom_include);
?>Bon, sa fonctionne bien sauf que l'include est à une position fixe dans ma page et pour des raisons pratiques .. bhin c'est pas pratique ^^ !
Y a t'il une solution plus simple qui permette d'enregistrer du php en bd via un textarea et qu'il soit correctement affiché ensuite ?
Merci.
Hors ligne
Personnellement je n'est jamais essayer de mettre du PHP dans une base de donnée, et j'en n'en comprend pas non plus l'utilitée.
De plus je pense qu'un tell système peu devenir une faille de sécurité très sérieuse pour un site internet.
Si tu peu m'en expliquer un peu plus sur ce que tu cherche à faire au final, je pourrait peu être te donner une autre méthode.
Hors ligne
C'est simple, tu connais mon site et sur celui j'explique à quoi sert telle code et j'en fait la démonstration.
D'autre part je peut être ammené à utiliser une include pour différentes pages d'un même contenue.
C'est marrant, c'est la 2 ieme fois que je pose cette question et j'ai toujours la même réponses et interrogation
.
Hors ligne
Le truc c'est que c'est pas vraiment logique, une base de donnée c'est fait pour stocker des donnée c'est tous normalement, donc tu ne peu pas placer de code directement.
Une chose qui est cependant possible c'est que dans les texte de ta base de donnée tu met un pseudo-code par exemple:
[include]le-fichier.php[/include]
et tu utilise une fonction pour traiter le pseudo-code et effectuer l'include, lors du traitement du texte.
function Remplace($chaine)
{
$chaine = ereg_replace("\[include\] ?([^\[]*) ?\[/include\]", include('\\1'), $chaine);
return $chaine;
}Teste avec un truc de ce genre (j'ai écrit sa vite fait, j'ai pas fait de teste)
Hors ligne
Pourquoi pas logique ... ? Une base de donnée est bien fait pour enregistrer des données alors pourquoi pas du php au même titre que le javascript/html/css ... ?
Perso j'utilise souvent les includes quand un "tuto" prend plusieurs pages pour différentes fonctions .. sa m'evite de me retaper tout à la main sur chaque page, d'ou ma necessité à pouvoir ne serait ce qu'enregistrer une include ..
Je vais tester ton code ![]()
Merci
Hors ligne
c00lman a écrit:
Pourquoi pas logique ... ? Une base de donnée est bien fait pour enregistrer des données alors pourquoi pas du php au même titre que le javascript/html/css ... ?
Peut être par ce que le PHP n'est pas des données ^^
Personnellement dans mes tables je n'ai que des données du texte et du pseudo code (dérivé de BBcode).
Hors ligne
oki
, c'est noté.
Cependant, j'ai testé le code au dessus sans grand succès et je dois avouer ne pas avoir réellement comprit la partie:
[include]le-fichier.php[/include]
Tu cas sa ou ?
Hors ligne
Tu connais le BBCode? la c'est similaire tu met un pseudo code dans ta base de donnée, par exemple le code plus haut.
Au moment ou tu récupère les donnée tu utilise une fonction sur le contenu avant de l'afficher, cette fonction va remplacer le code entre [include\] et [include] par une include tous simplement.
Je ne suis pas très sur de mon code je n'ai pas testé mais je suis sur que cela peu ce faire comme ceci.
Hors ligne
Non je ne connais pas du tout le BBcode
donc je copie/colle bêtement tes réponses
et sa ne fonctionne pas. Sa m'affiche [include]teste.php[/include] dans ma page .
Hors ligne
Tu a utilisé la fonction:
function Remplace($chaine)
{
$chaine = ereg_replace("\[include\] ?([^\[]*) ?\[/include\]", include('\\1'), $chaine);
return $chaine;
}
echo Remplace($contenu);Si c'est le cas j'ai peu être un problème dans mon expression régulière.
Hors ligne
Oui oui, j'ai bien utilisé ta fonction, cependant il me semble que j'ai zappé la fonction sur la variable
!
... $contenue = html_entity_decode($page['contenue_de_la_page']); echo Remplace($contenue); ...
Résultat:
Warning: remplace(\1) [function.remplace]: failed to open stream: No such file or directory in /home.31/r/e/f/***/page-site.php on line 5 Warning: remplace() [function.include]: Failed opening '\1' for inclusion (include_path='.:/usr/local/lib/php') in /home.31/r/e/f/***/page-site.php on line 5
Hors ligne
<?php
$contenu="[include]la-page.php[/include]";
function inc($fichier)
{
ob_start();
include($fichier);
$Contenu = ob_get_contents();
ob_end_clean();
return $Contenu;
}
function Remplace($chaine)
{
$chaine = ereg_replace("\[include\] ?([^\[]*) ?\[/include\]",inc('\\1'), $chaine);
return $chaine;
}
echo Remplace($contenu);Tu peu essayer un truc comme ça peu être.
Hors ligne
Testé et pas approuvé
.
Warning: inc(teste.php) [function.inc]: failed to open stream: No such file or directory in /home.31/r/e/f/***/page-site.php on line 46 Warning: inc() [function.include]: Failed opening 'teste.php' for inclusion (include_path='.:/usr/local/lib/php') in /home.31/r/e/f/***/page-site.php on line 46
Par ailleurs, $contenu="[include]la-page.php[/include]"; sous entend alors que le nom du fichier est enregistré en bd ?
Hors ligne
Apparemment le code que j'ai posté ne fonctionne pas.
En plus je vient d'apprendre quelque chose, dans la fonction que j'utilise dans le ereg_replace la valeur du paramètre n'est pas envoyé (page.php ) à la fonction mais le //1 est remplacé automatiquement dans le ereg_replace.
Donc mon code de fonctionne pas.
function inc($fichier)
{
return $fichier; // Renvoie bien le nom du fichier
}function inc($fichier)
{
echo $fichier; // Affiche \\1
}Je vais chercher si je trouve une autre solution pour toi.
Je ne vois toujours pas l'intérêt de faire des include dans une base de donnée ^^
Hors ligne
Crocxx a écrit:
Je ne vois toujours pas l'intérêt de faire des include dans une base de donnée ^^
Hargggggg ^^. Pour la peine je me fais un lien ...
Regarde cette page Listes des balises HTML. Le menu en haut de cette page (A B C D ...) est une include qui me permet de relier les 23 pages que comporte cette exemple. Je me vois mal me re taper ces 23 liens pour chacune des pages .. d'ou l'intérêt que je porte à ma demande
.
Et toi, si tu voulais démontrer ce que fait telle ou telle code dans tes tutos ... tu ferais comment ?
Hors ligne