Stocker puis puis comparer le NOM d'une variable

Stocker puis puis comparer le NOM d'une variable - PHP - Programmation

Marsh Posté le 19-02-2016 à 20:23:23    

Salut à tous,
 
Afin de rendre plus souple et modifiable un bout de mon code, j'aimerais pouvoir comparer le nom d'une variable avec une valeur stocké en base de données.
 
En base :
 
id | variable |  
1  | $var     |  
 
Dans mon script, un truc du genre :
 
Si la chaine de caractère base est = au nom de la variable testé.
 
J'ai fais des recherches pour récupérer le nom d'une variable, mais tous mes essais n'ont rien données.  
 
Merci

Reply

Marsh Posté le 19-02-2016 à 20:23:23   

Reply

Marsh Posté le 19-02-2016 à 23:01:37    

http://php.net/get_defined_vars ?


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 19-02-2016 à 23:48:50    

Merci pour ta suggestion, peut être que je l'utilise mal, mais si je fais
 
$b = array($var1, $var2);
$arr = get_defined_vars();
 
print_r($arr["b"]);
 
j'obtient  
Array ( [0] => [1] => )
 
Donc ca prend la valeur de la variable alors que j'ai besoin de son nom  :D  

Reply

Marsh Posté le 19-02-2016 à 23:55:13    

Correction, si je défini une valeur à mes variables (qui a terme en auront),
 
En utilisant la fonction array_keys() j'obtiens un résultat
 

Code :
  1. $var1 = "pomme";
  2.         $var2 = 'poire';
  3.         $b = array($var1, $var2);
  4.         $arr = get_defined_vars();
  5.         print_r(array_keys(get_defined_vars()));


 
Array ( [0] => var1 [1] => var2 [2] => b [3] => arr )
 
Du coup je devrais peut être pouvoir en tirer quelque chose

Reply

Marsh Posté le 22-02-2016 à 13:58:31    

Fais attention tout de même au côté sécurité. Je dois avouer que j'ai du mal à voir l'intérêt de stocker en base des noms de variables d'une script :??: Autant, je comprendrais que tu sérializes un objet pour le stocker en BD, autant des noms de simples variables, j'entrevois plus des éventuelles failles de sécus que de rendre plus souple un bout de code :/
 
Tu pourrais nous décrire plus précisément ce que tu cherches à faire ? Parce que sans doute que l'idée de rendre plus souple ton code est bonne mais que la solution que tu as retenue l'est moins... ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-02-2016 à 14:54:43    

Salut effectivement, laisser des traces de l'architecture d'un programme en base n'est pas forcement une bonne idée.

 

Pour le moment je piétine, et je ne sais pas vraiment comment débloquer la situation.

 

Pour expliquer un peut mieux la problématique.

 

En base de donnée j'ai des textes qui devront êtres utiliser pour du publipostage par Email, et ceux pour différents scénario. Ces textes contiennent des balises du genre, {date}, {nom}, etc.

 

Actuellement, j'ai réussi à centraliser une partie de mes publipostage dans une seul est même classe php. La comparaison des {balises} et faite à partir de tableau défini dans le code de ma classe.

 

Ce que je souhaiterais c'est pouvoir gérer cette liste de code directement dans la base. avec une table :
||id | balise | variableCorrespondante | donnéeExemple | Catégorie||

 

Grace à une aide je peu maintenant faire à peut prés le résultat attendu

 


$tableauPubli; // Est un tableau de la table de publipostage
$email->getCorpsEmails() // Retourne le texte comportant les balises à remplacer

 
Code :
  1. $vars = array();
  2. foreach($tableauPubli as $key){
  3. $vars[$key['publiTag']] = $key['publiVariable'];
  4. };
  5. echo str_replace(
  6. array_map(
  7.  function($item) {
  8.   return '{'. $item .'}';
  9.  },
  10.  array_keys($vars)
  11. ),
  12. array_map(
  13.  function($item) use ($stage) {
  14.   return isset($stage->$item) ? $stage->$item : 'undefined'; },
  15.  $vars
  16. ),
  17. $email->getCorpsEmails()
  18. );
 

Le problème avec cette méthode c'est que ca récupère les valeurs associé aux propriété de la class, je ne peu donc pas utiliser mes Getters, autre problématique, j'aimerais pouvoir faire passer n'importe quelle classe à cette routine, ce qui veux dire qu'il faut qu'elle soient capable d'explorer la classe que je lui envoie, récupérer toutes les propriété, qui parfois contiennent des tableaux d'objets ... Donc c'est un peu galère

 

J'ai bien essayé avec les get_object_var, puis de tester si chacune des valeurs sont is_object, ou is_array(), mais comme les éléments peuvent s'imbriquer ca donne des boucles toutes foireuses.

 


Message édité par kontas le 22-02-2016 à 14:55:04
Reply

Marsh Posté le 22-02-2016 à 15:05:34    

De ce que je comprends, t'as pas besoin de stocker des noms de variables "php". C'est juste un pb d'associer des colonnes d'une table à des balises dans un template.
 
Il faut donc que t'arrive à faire une structure de BD (1 ou plusieurs tables) permettant de gérer les enregistrements pour le publipostage, et, en fonction du template utilisé, que les enregistrements disposent des bonnes données à insérer dans le template.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 22-02-2016 à 15:28:12    

C'est tout à fais ca. Pour le moment ca fonctionne avec une classe simple en mettant le nom de la propriété qui contient la valeur en base. Seulement mes classes ne sont pas si simple :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed