Bonjour,
J'ai un petit problème dans le développement d'une boutique.
Une fois le paiement accepter, toutes les étapes de sécurité executé, j'aimerais récupérer un code php dans la base de donnée et l'executé.
Je m'explique:
Base de donnée:
Article_ID TITLE DESC PRIX Execute_Code
1 t-shir blabla 10 <?php echo 'test'; ?>
Mon code actuel:
$req = $connexion->prepare('SELECT * FROM boutique_article WHERE id= :id');
$req->execute(array(
'id' => 1
));
$code = $req->fetch();
var_dump($code['Execute_code']);
Mais au lieu de m'écrire "test" et donc de m'executer ce code stocké dans "execute_code", il me sort "string(37) "" (Le code n'est pas executé)..
Une idée ?
Salut,
je crois qu'il faut utiliser eval
...
eval($code['Execute_code']);
Mais attention on associe souvent à cette fonction, la phrase : Eval is Evil
xD
Google "eval is evil" et méfies-toi des "failles" que ça peut engendrer.
D'ailleurs, sur la page du 'manual', il y a un avertissement :
Attention
La construction de langage eval() est très dangereuse car elle autorise l'exécution de code PHP arbitraire. Son utilisation est vivement déconseillée. Si vous avez soigneusement vérifié qu'il n'y a pas d'autres options que de l'utiliser, gardez une attention toute particulière à ne pas y passer de données provenant d'un utilisateur sans les avoir précédemment validées minutieusement.
Super, merci :)
Je vais me méfier, ^^
Solution
<?php eval("?>" . $code['Execute_code']. "<?php"); ?>
Juste une question, pourquoi veux tu stocker du code en base de donnée ?
C'est genre le pire truc à faire.
En faite, je développe une boutique pour un CMS, l'admin définie le prix, le titre etc.. et le code d'execution.
En effet , après paiement, c'est le code défini par l'admin qui est executé.
Tu es obligé de laisser les balises PHP dans la base de données ?
Si tu les enlève pour avoir en base de données :
echo 'test';
// au lieu de : <?php echo 'test'; ?>
Pour avoir ensuite :
<?php eval($code['Execute_code']); ?>
Ça fonctionnerait ça ?
@Cobryn Tu ne répond pas à ma question.
Et d'après mon expérience, si tu dois stocker du code en base de donnée, c'est que tes algo ne sont pas bons.
Qu'est- ce qui justifie le fait de faire cela ? Quel est ton use case ici ? A quoi le code va servir ? Pourquoi le stocker en base de donnée ?
Ah ça, c'est clair.
Bon courage en tous cas, ton environnement de travail n'a pas l'air évident.
"@Cobryn Tu ne répond pas à ma question.
Et d'après mon expérience, si tu dois stocker du code en base de donnée, c'est que tes algo ne sont pas bons.
Qu'est- ce qui justifie le fait de faire cela ? Quel est ton use case ici ? A quoi le code va servir ? Pourquoi le stocker en base de donnée ?"
@Elhebert Dans la boutique, l'article est définie par l'administrateur, et depuis le panel d'administration, l'administrateur défini le code qui va être executé après le paiement.
Le client achète "T-Shirt" et ça execute <?php echo 'test'; ?> le code défini par l'administrateur.
@SLK merci :)
@Cobryn J'avais compris ça mais ce n'est toujours pas une réponse à ma question.
je vais tenter de formuler ça plus simplement:
echo test
J'éssaye simplement de comprendre a quoi ça te servirai de créer un système pas scalable du tout qui va creuser ta dête technique comme pas possible ?
Hmm en gros, immaginons, l'admin vend (Jeux vidéo) un accès premium, l'admin va définir comme code:
<?php
$username = $client['username'];
$updateCode = $connexion->prepare('UPDATE users SET premium= :premium WHERE username= :username');
$updateCode->execute(array(
'premium' => 1 ,
'username' => $username
));
?>
@Cobryn Attend, tu es en train de me dire, que tu créés un cms pour un boutique en ligne, mais que ce sont les utilisteurs de ton cms (les admin quoi) qui vont devoir coder la gestion des achats ?
J'ai l'impression que tu as un GROS soucis dans ton "business plan" ou quoi que tu ai comme plan à long terme. Car un projet comme ça, sur le long terme, ça ne tiendra jamais la route.
Cette partie du code, c'est à toi d'y penser. Par exemple, via des modules/plugins que l'administrateur active ou non suivant le type de produit qu'il désire vendre. Mais ta solution n'est clairement pas viable. Que ce soit l'aspect business, sécurité ou scalabilité.
Désolé d'être dur avec toi.
EDIT: En plus comment va-tu gerer ce que les gens mettent comme code en base de donnée ? Car tu donne accès à ta base de donnée à tout personne utilisant ton cms. Et par conséquent, tu donne accès à n'importe qui un accès vers tes données.