EXÉCUTER UNE FONCTION SI C'EN EST UNE

cs_Elektordi Messages postés 186 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 21 janvier 2008 - 20 août 2005 à 12:49
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 - 23 août 2005 à 09:46
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33341-executer-une-fonction-si-c-en-est-une

malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
23 août 2005 à 09:46
Hehe, en reflechissant, j'ai quand meme compris ce qui coincait avec eval...
<?php
$fct1 = "bonjour les amis";
eval( "\$fct1 = $fct1;" );
echo $fct1;
?>
ca, ca va donner une erreur (parse error, unexpected T_STRING). Bien sur $fct1 = "'bonjour les amis'" est la solution mais dans le cas present, celui qui m'a demande la fct ne peux pas changer le contenu de la base de donnees...
GiUsTiNo Messages postés 129 Date d'inscription lundi 26 avril 2004 Statut Membre Dernière intervention 30 juin 2012
21 août 2005 à 23:27
le plus facile est de mettre directement le code php dans la fonction eval() pour pas chipoter avec les slash/guillemets... Personnelement, j'ai utilisé cette technique, mes pages étant en base de données, je les récupérais avec eval() (si code php il y avait => avec le html, cela retourne une erreur, bien sur :p)

Bonne continuation
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
20 août 2005 à 13:26
J'ai testé tes deux propositions. La deuxième retourne une erreur, mais la première va:

$fct1 = "strrev('bonjour les amis')";
eval( "\$fct1 = $fct1;" );
echo $fct1;

cela donne bien "sima sel ruojnob"... well... je crois bien que je l'ai dans l'os!

Ben voilà, touché coulé le malik7934!
cs_Elektordi Messages postés 186 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 21 janvier 2008
20 août 2005 à 13:14
Oui, j'ai déjà utilisé eval...

Et si tu enlevait les guillemets:

eval( "\$fct1 = $fct1;" );
ou
eval( "\$fct1 = ".$fct1.";" );

Quand au $name, c'est car ds ta fonction tu as rajouté "if (count($sep[0]) == 1) echo $param;", mais bon ca peut s'arranger tout en utilisant eval!
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
20 août 2005 à 13:00
Nah, pas d'accord, primo eval($name) par exemple va te retourner une erreur, ensuite si je me fie à l'exemple sur php.net:

<?php

$name = "bonjour les amis";
eval( "\$name = "$name";" );
echo $name;
echo '
';

$string = "fctperso('bonjour les amis')";
eval( "\$tring = "$string";" );
echo $string;
echo '
';

$fct1 = "strrev('bonjour les amis')";
eval( "\$fct1 = "$fct1";" );
echo $fct1;
echo '
';
echo '
';

$fct2 = "pow(2, 8)";
eval( "\$fct2 = "$fct2";" );
echo $fct2;
echo '
';

?>
va me donner
bonjour les amis
fctperso('bonjour les amis')
strrev('bonjour les amis')
pow(2, 8)

et non pas le résultat des fonctions.
Hehe... j'avais d'ailleurs commencé par essayer avec eval... t'as essayé ce que tu disais avant de poster? Peut-être que je ne sais pas employer eval de la bonne manière...
cs_Elektordi Messages postés 186 Date d'inscription mardi 31 décembre 2002 Statut Membre Dernière intervention 21 janvier 2008
20 août 2005 à 12:49
>Voilà... et le premier qui me sort le même code en 2 lignes, je le frappe ;)

Dommage... Voila le même code en UNE ligne !!!

$name = "bonjour les amis"; -> eval($name): bonjour les amis
$string = "fctperso('bonjour les amis')"; -> eval($string): Vous avez écrit bonjour les amis
$fct1 = "strrev('bonjour les amis')"; -> eval($fct1): sima sel ruojnob
$fct2 = "pow(2, 8)"; -> eval($fct1): 256

Plus d'infos: http://www.nexen.net/docs/php/annotee/function.eval.php
Rejoignez-nous