BDD Remplacer un texte par une fonction

Résolu/Fermé
tacki - 4 avril 2011 à 11:54
 tacki - 4 avril 2011 à 13:41
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

A voir également:

2 réponses

caphar Messages postés 50 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 7 septembre 2011 12
Modifié par caphar le 4/04/2011 à 13:30
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
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
caphar Messages postés 50 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 7 septembre 2011 12
4 avril 2011 à 13:31
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
Ok merci beaucoup tout fonctionne nickel !
0