BDD Remplacer un texte par une fonction

Résolu
tacki -  
 tacki -
Bonjour,

Je vous explique ce que je voudrais faire :

1. J'enregistre dans la base de donnée sql dans un champ texte par exemple
[2] {8} (enregistré sous $message)

2. je la récupère en php, et je voudrais remplacer ce qui se trouve par la fonction1
et ce qui se trouve entre {} dans par la fonction2

J'ai essayé avec
$message = str_replace("{","fonction1(",$message);
$message = str_replace("}",")",$message); // pour refermer la parenthèse

Mais lorsque je fais un echo il apparait :

fonction1(2) (qui normalement devrait renvoyer 'texte2')
fonction2(8) (qui normalement devrait renvoyer 'membre8')

Or bien sûr je voudrais qu'en fait ça m'affiche le résultat et non la formule !

Avez-vous une idée

2 réponses

  1. caphar Messages postés 55 Statut Membre 12
     
    Si tu veux exécuter la fonction, str_replace ne suffit pas car il renvoie une chaine.

    Tu devras utiliser une fonction comme preg_replace_callback().
    Je ne suis pas sûr d'avoir compris tes shortcodes entre accolades, donc j'ai fait avec ce que j'ai compris (un nombre entre accolades devient l'argument de ta fonction fonction1()) :

    $texte = 'Le {8} est gros'; 
    
    function fonction1($num) 
    { 
        return "numéro " . $num; 
    } 
    $var = preg_replace_callback('/\{([0-9]*)\}/', create_function(
                // Les guillemets simples sont très importants ici
                // ou bien il faut protéger les caractères $ avec \$
                '$matches',
                'return fonction1($matches[1]);'
            ),
            $texte);
    print $var; 
    // Affiche "Le numéro 8 est gros"


    Tu as d'autres exemples ici :
    https://www.php.net/manual/fr/function.preg-replace-callback.php
    1
  2. tacki
     
    Ok merci beaucoup pour la solution c'est en effet ce que je recherche !
    Juste un truc avec ta fonction ça m'affiche avec le print :

    Le numéro {8} est gros

    (à la place de 'Le numéro 8 est gros')

    Donc ça doit être au niveau du masque qu'il y a un souci ?
    Je vais lire ton lien, car avec les masques j'ai toujours beaucoup de mal à comprendre !

    Merci en tout cas de m'avoir répondu, vite et efficace !
    0
    1. caphar Messages postés 55 Statut Membre 12
       
      T'as raison, j'avais oublié les parenthèses et j'utilisais $matches[0] qui récupère l'ensemble des résultats. J'ai corrigé le code dans ma réponse.
      Là je ne reprends que le chiffre et $matches[1] isole chaque résultat.
      0
    2. tacki
       
      Ok merci beaucoup tout fonctionne nickel !
      0