IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] Executer une fonction PHP contenu dans une variable texte


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [Système] Executer une fonction PHP contenu dans une variable texte
    Bonjour,
    Je ne sais pas si c'est possible, mais j'aimerai pouvoir executer une fonction contenu dans le texte d'une variable.
    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	<p>
    	<?php
    	function Ecrire($fString)
    		{
    			return $fString;
    		}
    	$String = 'Bonjour je suis <?php Ecrire("moi");?>.';
    	echo $String;
    	?>
    	</p>
    Renvoie uniquement "Bonjour je suis .".

    Il semble que la fonction Ecrire n'est pas prise en compte.
    Merci pour toute aide.

  2. #2
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <p>
    <?php
    function Ecrire($fString)
    {
    return $fString;
    }
    $toto = Ecrire("moi");
    $String = "Bonjour je suis $toto";
    echo $String;
    ?>
    </p>

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Non a priori il ne manque pas d'echo. Même avec l'exemple ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	<p>
    	<?php
    	function Ecrire($fString)
    		{
    			echo $fString;
    		}
    	$String = 'Bonjour je suis <?php Ecrire("moi");?>.';
    	echo $String;
    	?>
    	</p>
    le texte renvoyé reste : "Bonjour je suis ."

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $String = 'Bonjour je suis ' . Ecrire("moi");
    C'est mieux

  5. #5
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    ce n'est pas comme ça que ça marche PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $String = 'Bonjour je suis '.Ecrire("moi");
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  6. #6
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci à vous,

    Mais dans ces exemples le code php n'est pas présent dans le string de la variable. Encore plus simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <p>
    <?php
      $text = "Je m'appelle <?php echo 'toto';?>";
      echo $text;
    ?>
    </p>
    ne renvoie que "Je m'appelle". Comment faire pour que l'instruction <?php echo 'toto';?> soit exécutée ? Concrètement $Text est le contenu d'un champ de base de données...

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Essaye avec eval().

  8. #8
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    non, non et non, on ne rouvre pas des balises PHP dans du code PHP !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $nom = 'toto';
      $text = "Je m'appelle $nom";
      echo $text;
    ?>
    marche, ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $nom = 'toto';
      $text = 'Je m\'appelle '.$nom;
      echo $text;
    ?>
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup vg33,
    Après quelques difficultés de syntaxe cette fonction que je ne connaissais répond à mon besoin !

  10. #10
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Mais pourquoi fait tu comme ça. Il doit bien y avoir une raison.

    Je suis de l'avis titoumimi, on n'a pas à faire ça a mois d'avoir provenant de BDD mais c'est assez rare.

    Sinon pouvait avoir un peu d'explications rapport au contexte et de ce que tu veux faire car là c'est vraiment pas propre
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  11. #11
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    dans le pire des cas, utilises call_user_func, mais eval, ça fait vraiment des choses pas belles.

    m'enfin, à priori, les cas ou l'on doit utiliser ce genre de fonctions sont super rares, à mon avis on peut tout à fait faire sans dans ton cas... donnes nous un peu plus de détails
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    D'après le manuel php :
    eval() évalue la chaîne code_str comme un script PHP. Parmi les utilisations possibles, cette fonction permet de stocker du code dans une base de données, pour utilisation ultérieure.
    Ce qui répond directement à la question posée.
    Mais c'est vrai que j'ai déjà lu que eval() n'était pas forcément une bonne solution. Pourquoi ? En savez-vous plus là-dessus ?

  13. #13
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    En tout cas dans son cas, cela ne semble pas être la bonne solution.

    Il y a quelques jours, une personne voulait faire l'interprétation d'une règle de calcul stocké dans une table. Dans ce cas, il me semble que eval() correspond tout a fait au problème.
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par FCYPBA
    En tout cas dans son cas, cela ne semble pas être la bonne solution.
    Ce qui ne répond pas à ma question

  15. #15
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Dans son cas, il n'a pas besoin d'évaluer quelque chose car il connait cette chose.

    Si sa fonction provenait d'une base de données ou d'une quelconque source externe, alors eval serait une solution. C'est pour ça que l'on demandait le contexte d'utilisation.

    Ici, la concaténation est CE QU'IL FAUT FAIRE.
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Citation Envoyé par Devipir
    Concrètement $Text est le contenu d'un champ de base de données...
    C'est pour cela que j'ai proposé eval().

    Sinon, hors de ce contexte, je suis entièrement d'accord avec la concaténation. Eval() en effet n'est utile que quand on ne connait pas le code à exécuter.

  17. #17
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Je dois faire mon mea culpa, car je n'avais pas vu cette phrase tout à l'heure. Ensuite la machine s'est un peu emballé

    Fin du H.S.
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  18. #18
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut moi je vois bien une utilisation ...
    exemple: un template html avec des tags "a la smarty", dans une implémentation faite maison ...

    on ouvre le fichier template dans une variable ...
    on remplace les tags {ouvreboucle} {fermeboucle} par du code php

    et ensuite, il essaie d'évaluer le code contenu dans la variable ... non?

  19. #19
    Membre éclairé
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par vg33
    Mais c'est vrai que j'ai déjà lu que eval() n'était pas forcément une bonne solution. Pourquoi ? En savez-vous plus là-dessus ?
    Tout d'abord parce que c'est une fonction gourmande en resource ensuite, et surtout, parce que c'est une fonction qui peut se révéler dangereuse... à utiliser avec précaution et en connaissance de cause... tout comme l'option "e" des expressions régulière... sinon c'est un coup à avoir un gouffre de sécurité dans son site... .. .

    @ tchaOo°

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Drupal] Appel form ajout de contenu dans une colorbox ou directement dans une vue
    Par cpom dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 17/02/2012, 15h41
  2. Objet existant reconnu dans une fonction mais pas dans une autre
    Par Jiyuu dans le forum Général Python
    Réponses: 0
    Dernier message: 20/09/2011, 18h19
  3. [Dojo] Objet Dojo créé dans une fonction et utilisé dans une autre.
    Par hapalemur dans le forum Bibliothèques & Frameworks
    Réponses: 10
    Dernier message: 05/06/2009, 13h59
  4. [MySQL] executer une commande php contenu dans une variable
    Par Stopher dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/11/2006, 15h44
  5. Réponses: 3
    Dernier message: 20/05/2006, 23h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo