Script PHP en galère

morice

Best Member
Salut,

J'attaque par le problème:
L'idée est de permettre un utilisateur d'appeller des fonctions php dans le contenu des articles dans mon CMS. Ces fonctions sont tirées d'une bibliothèque créée pour la gestion du contenu. Le problème c'est que j'ai des paramètres à passer.

Exemple:
:fleche: un contenu tel que je souhaite qu'il soit tapé par l'utilisateur "abcde::disp_profil(52)::fghi"
Donc l'idée est de faire appel à une fonction php qui remplacera "::disp_profil(52)::" par ce que retournera ma fonction php disp_profil(), avec l'argument 52, argument qui peut varier de taille selon le besoin. Et c'est là que je suis paumé...

au début, j'avais pensé à cet appel: "::disp_profil|52::
mais dans ma tête c'est pas plus clair...
apparemment, dansce que j'ai pu voir à droite à gauche sur le net, il y abien intervention des fonctions concernant les expressions rationnelles (couramment appellées "expressions régulières", bien que ce soit une mauvaise traduction de l'anglais)

Vous auriez pas un petit coup de main en stock à me filer?
svp :)
 

Cybervince

Best Member
C'est quoi qui bloque ?
Si tu arrive à isoler le nom de la fonction à lancer, tu dois de la même façon pouvoir extraire l'intégralité des paramètres (en gros tout ce qui est entre parenthèses) et donc exécuter ta fonction avec les paramètres récupérés.
 

morice

Best Member
On m'a fournit la réponse, je ferai un brief sous peu.
 

morice

Best Member
Alors voilà la solution:

<?
function disp_profil( $n )
{
return ( $n[1] * 2 );
}
// le nombre à traité est dans $n[1];


// chaîne de test
$text = 'abcde::disp_profil(52)::fghidfs::disp_profil(5)::hj,hjkh;b fghbhjn,u::disp_profil(259876)::,uytybhui. nytnui,yu';


// à la place de disp_profil, tu dois avoir le nom de ta fonction à 1 paramètre
$text = preg_replace_callback( '/::disp_profil\(([0-9]+)\)::/', 'disp_profil', $text );

echo $text;
?>

ce qui a pour effet de me renvoyer
abcde104fghidfs10hj,hjkh;b fghbhjn,u519752,uytybhui. nytnui,yu

Exactement ce qui était cherché.

En fait, je cherche une chaine de caractères avec à un endroit une combinaison numérique inconnue par sa valeur comme par sa longueur (utilisation donc des expressions rationnelles et non régulières qui n'est qu'une erreur de traduction)

Ensuite, la fonction preg_replace_callback() me permet de replacer la chaine concernée par l'appel de la fonction du même nom, les paramètres sont passés naturellement. Et ainsi, on a le résultat désiré. :happy:

Sont cool chez Codes-Sources :cool:
 

Ca peut vous intéresser