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 ?

13 réponses


SLK
Réponse accepté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.

http://php.net/manual/fr/function.eval.php

Cobryn
Auteur

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.

Cobryn
Auteur

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
Auteur

Hmm,
J'essai :) 2sc

Cobryn
Auteur

Ouép ça fonctionne mais ça résous pas le prblm de sécurité :/

@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
Auteur

"@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:

  • Pourquoi l'administrateur voudrais mettre du code php en base de donnée ?
  • Pourquoi executer du code php une fois le payement effectué ?
  • Peux-tu nous donné un exemple concret en situation réel ? Autre que 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 ?

Cobryn
Auteur

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.