Comment enregister du code php dans sql?

  • Auteur de la discussion Auteur de la discussion tryan
  • Date de début Date de début
WRInaute passionné
Bonjour,

J'essaye en vint d'enregistrer du code php dans ma base et de le faire exécuter lors de son affichage et je ni parviens pas !

Genre j'enregistre en bd le code suivant via un textarea avec htmlentities():
Code:
<strong>Teste d'un code php.</strong><br/>
<?php 
$salut="bonjour";
echo "$salut";
?>
Je décode dans ma page avec html_entity_decode() et la le code php n'est pas interprété. Je regarde le code source de ma page via Firefox et je vois mon code php écrit telle que je l'ai enregistré ...
Peut on enregistrer du php dans sql et si oui comment svp ?
Merci.
 
WRInaute occasionnel
eval est bien la solution à utiliser même si je ne l'ai jamais vraiment apprécié. Sinon autre feinte, tu fais des enregistrement dans des fichiers et tu appeles ton code par des include, c'est certes plus bourrin mais tu oublies plein de soucis comme ça.
 
WRInaute passionné
Merci les gars :) mais la je suis un peut largué ..

J'ai regardé la fonction "eval" mais je ne comprend pas comment l'utiliser!
Moi je tape mon code directement dans un textarea . Si je reprend le code sur http://www.manuelphp.com/php/function.eval.php , que je fait copier/coller dans mon textarea, j'ai une partie du code qui s'affiche... bref, je ne saisie pas la façon de l'utiliser depuis mon interface!

silef, je n'ai pas comprit ton système d'include ... si je fais l'appel d'une include en insérant le code via mon textarea par exemple
Code:
<?php include ("menu.php");?>
..J'obtiens le même résultat .. rien ne s'affiche et le code est visible dans la source.

Vous pouvez pousser un peut plus au niveau détails pour un amateur svp?
Merci
 
WRInaute accro
Encore toi ?

Appelons $moncodephp la variable qui contient le code php provenant de l'enregistrement présent dans ta base de données.

Code:
<?
eval( "\$moncodephp = \"$moncodephp\";" );//
?>
...
 
WRInaute passionné
tryan> Si tu n'es pas un peu calé en PHP je te déconseille fortement d'utiliser ce genre de solution.
Pourquoi as tu besoin de faire cela?
 
WRInaute passionné
nickargall a dit:
Bhaaa ouai , désolé :lol: .

Sa ressemble à ce que j'ai mis en place :
Pour afficher mes données je fais:
Code:
<?php echo html_entity_decode($page['contenue_de_la_page']); ?>
Pour utiliser eval() je fais comme suit:
Code:
<?php
$lien = $page['contenue_de_la_page'];
eval("\$lien = "$lien";");
echo html_entity_decode($lien);
?>

Si je met cela dans mon textarea:
Code:
<strong>Teste d'un code php.</strong><br/><?php 
$salut="bonjour";
echo "$salut";
?>
<br>
<?php include ("menu.php");?>
J'ai juste Teste d'un code php. qui s'affiche et rien d'autre.
Un petit tour dans le code source de la page et je vois ceci:
Code:
<strong>Teste d'un code php.</strong><br/>
<?php 
="bonjour";
echo "";
?>
<br>
<?php include ("menu.php");?>
J'ai merdé quelque part ?

Bacteries, non je suis loin d'être calé dans le domaine mais j'essaye quand même.
J'essaye de rendre un de mes sites dynamique en créant une interface d'administration pour enregistrer ensuite en bd toutes mes données.
Pour démontrer ce que peut faire telle ou telle code php, j'ai besoin de l'enregistrer puis de l'interpréter ou ne serait ce que pour une simple include servant pour plusieurs pages.
 
WRInaute accro
Solution plus simple et plus sécurisée: au lieu de stocker ton code php dans une base de donnée et te casser la tête pour l'appeler et l'interpréter, pourquoi ne les stocke tu pas dans des fichiers PHP à part, que tu appelles simplement par include ensuite ?

Ton fichier "bonjour.php" contient
Code:
<strong>Teste d'un code php.</strong><br/><?php
$salut="bonjour";
echo "$salut";
?>
<br>
<?php include ("menu.php");?>

et tu fais appel à un include pour l'appeler, non ? Ca serait beaucoup plus simple et beaucoup plus sécure à mon sens ...
 
WRInaute accro
Les datas php sont dans le cache et ne seront jamais interprétés.

Pour les interpreter :

- injecter les datas php dans mysql
- faire une lecture + écriture (fwrite) dans un nouveau fichier php xxxx
- lancer un header sur le meme script qui inclue cette fois le fichier php xxxx écrit physiquement
- destruction du fichier xxxx
 
WRInaute passionné
tryan> je vois pas pour autant pourquoi tu passes par ce genre de chose assez complexe. A mon avis tu as certainement moyen de faire des choses bien plus simplement.
 
WRInaute passionné
nickargall: et je fais comment pour faire une include des fichiers extérieure depuis mon interface puisque le faite d'enregistrer juste <?php include ("menu.php");?> dans ma bd ne fonctionne pas non plus ?

KOogar: je prend un décodeur et j'essaye de comprendre ta méthode :lol: . Sa veut dire quoi sa -> (injecter les datas php dans mysql )?

Bacteries:Je ne vois pas comment faire plus simple ! Si tu as d'autres idées à me proposer n'hésite pas. Le html/css/script semble passer correctement .. il y a juste le php qui m'e*m*rde !
 
WRInaute passionné
Explique plus en détail ce que tu veux faire, car là je ne vois pas du tout l'intérêt de la chose.

J'essaye de rendre un de mes sites dynamique en créant une interface d'administration pour enregistrer ensuite en bd toutes mes données.
Pour démontrer ce que peut faire telle ou telle code php, j'ai besoin de l'enregistrer puis de l'interpréter ou ne serait ce que pour une simple include servant pour plusieurs pages.

C'est pour faire des tutoriels PHP? (en gros?)
 
WRInaute passionné
nickargall a dit:
oulà

c'est encore pire que pour le rewriting ..
apprends le php
...
Je l'attendais celle la ! Dommage qu'il n'y ai pas la même espace dédier au php que pour le référencement :
Débuter en référencement
L'objectif de ce forum est de permettre aux nouveaux de poster des messages sans craindre de se faire dire "on l'a déjà dit 100 fois dans ce forum !". Avis à tous ceux qui débutent, ou qui ont des questions de base sur le référencement : c'est ici qu'il faut les poser.
Sa éviterais ce genre de remarque ...

Bacteries:
Dans les détails, je ne peux pas faire plus simple. Je me suis crée une interface en php (même si je suis encore plus nul que pour le rewriting) afin de créé les pages de mon site de façon dynamique. Donc tout est enregistré en bd (meta+contenue). Supposons maintenant que je veuille créer sur une partie de mon site un lexique quelconque classé par ordre alphabétique comportant un menu commun à l'ensemble des pages .. il me faut bien faire une include sur cette partie pour éviter de me retaper tout à la main sur chacune des pages.
 
WRInaute accro
tryan a dit:
KOogar: je prend un décodeur et j'essaye de comprendre ta méthode :lol: . Sa veut dire quoi sa -> (injecter les datas php dans mysql )?

Prend un décodeur PHP :D

"injecter les datas php dans mysql" dans un plus commun veut dire:
"stocker ou placer des enregistrements (des données) dans des tables mysql".
 
WRInaute passionné
Généralement pour un site dynamique on a une page avec menu & cie, une admin qui permet de rentrer des articles. Et dans le site on affiche ces articles.
On ne créé par une page à chaque fois (ze bronx sinon!), ça permet d'être très souple sur la présentation (on peut en changer facilement), et on gère les différentes parties de la page (meta, titre) avec les données en base.

En gros on a un squelette de page qu'on remplit...

Et si on veut une page qui liste des catégorie on créé une page PHP qui va le faire.
 
WRInaute passionné
KOogar merci pour la traduction, j'ai comprit ton raisonnement :D .

Bacteries oui je suis d accord et c'est ce que fait mon code aussi. Cependant "un article" peut comporter plusieurs pages d'ou l'utilisation d'une include.

-------------------------------------------------------------------------------
include du menu Lexique alphabetique
-Accès directe par lettre-
A - B - C - D - E - F - H - I - K - L - M - N - O - P - Q - R - S - T - U - V - W - X
---------------------------------------------------------------------------------
Affichage de l'article correspondant à la lettre a

*************************************************
include du menu Lexique alphabetique pour la lettre b
-Accès directe par lettre-
A - B - C - D - E - F - H - I - K - L - M - N - O - P - Q - R - S - T - U - V - W - X
---------------------------------------------------------------------------------
Affichage de l'article correspondant à la lettre b
**************************************
Et ainsi de suite ... Un menu commun à une partie des pages du site affiché par une include.

Ceci dit, après teste, je peut faire joujou avec les conditions mais sa pourrait finir par devenir lourd à la fin ..

Code:
<?php
if($page =='1'){
include ("teste.php");
}
?>
 
WRInaute passionné
Ne serait-il pas plus judicieux d'avoir une page spéciale pour traiter tes listes? Ou prévoir qu'un article peut avoir plusieurs pages? Et dans ce cas tu teste si il a plusieurs pages, si oui tu fais ton menu.

Sinon faire comme wiki en gérant des "templates"?
 
WRInaute passionné
comme le dit nickargall ça ressemble à un topic précédent :wink:

Si tu veux réutiliser du code à plusieurs endroits, il ne faut pas le stocker en base de donnée mais dans un fichier "include". Rien ne t'empêche de le gérer depuis une page d'admin par exemple avec des file_put_contents. Attention tout de même aux problèmes de sécurité

Tu peux aussi stocker le nom de cet include dans ta base de donnée pour faire un include dynamique (je l'ai fait pour gérer une pseudo crontab).
Code:
	if (!file_exists(dirname(__FILE__) . '/' . $nom_include)) die("L'include n'existe pas");  //s'assure que l'include est dans ton espace web
	include_once(dirname(__FILE__) . '/' . $nom_include);  //$nom_include est le chemin relatif par rapport au fichier courant
 
WRInaute passionné
Le eval("$truc=$machin") ne peut pas marcher. il faut interpréter ton code php directement (exemple : echo 'test') et non pas "$truc=echo'test'"

Fais juste eval($machin).

Mais comme dit précédemment, la "bonne" solution est tout simplement de créer de vrais fichiers php au lieu de mettre le code dans la base de données.
 
WRInaute passionné
Oki, j'ai donc opté pour la solution de webmasterlamogere et celle ci semble fonctionner :D .
J'ai créé une nouvelle table pour obtenir la concordance que je souhaitais et donc $nom_include prend la valeur du nom du fichier que je souhaite inclure.

Il y a juste un "hic" qui pourrait me jouer des tours dans le temps ... le code inclue une page à une position fixe...

Merci Patrice A., je vais re tester avec cette fonction.
 
WRInaute passionné
Tu peux imaginer des solutions plus élaborée, genre des balises {TO_INCLUDE:blabla.php} dans ton texte qui remplace {TO_INCLUDE:blabla.php} par le contenu de ton fichier blabla.php, ...
Mais ça commence à devenir sympatoche.
 
WRInaute passionné
Bacteries a dit:
Tu peux imaginer des solutions plus élaborée, genre des balises {TO_INCLUDE:blabla.php} dans ton texte qui remplace {TO_INCLUDE:blabla.php} par le contenu de ton fichier blabla.php, ...
Mais ça commence à devenir sympatoche.

Heuuu, en faite je n'arrive pas imaginer ... à vrai dire je ne comprend pas du tout ton système (petit niveau php, désolé pour les surdoués en la matière). J'ai foullié un peut sur GG et je n'ai rien trouvé.

Pour le moment j'ai mis en place un champ en sup dans ma base qui recup l'id de la page et qui permet d'associer la bonne include à la bonne page grace à la solution de webmasterlamogere .
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut