OVH Cloud OVH Cloud

difficulte avec eval

5 réponses
Avatar
Jacques Meunier
Bonjour,

je fais une boucle pour incrémenter une chaine qui a pour forme
définitive :

$chaine = "if (test == 1 or test == 2 or test == 3)";

quand je fais

eval($chaine);
{
instructions

}
ca ne marche pas ... snif

Merci de votre contribution

--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com

5 réponses

Avatar
Olivier Miakinen

$chaine = "if (test == 1 or test == 2 or test == 3)";
eval($chaine);


C'est quoi, test ?

Une idée à tout hasard :
$chaine = 'if ($test == 1 or $test == 2 or $test == 3)';

Cela dit, il y a sûrement plus propre que de passer par un eval().

--
Olivier Miakinen
Non, monsieur le juge, je vous le jure : jamais je n'ai cité
Bruxelles dans ma signature.

Avatar
bruno modulix
Jacques Meunier wrote:
Bonjour,

je fais une boucle pour incrémenter une chaine qui a pour forme
définitive :

$chaine = "if (test == 1 or test == 2 or test == 3)";

quand je fais

eval($chaine);
{
instructions

}
ca ne marche pas ... snif


A tout hasard :
$chaine = "if ($test == 1 or $test == 2 or $test == 3)";
ou
$chaine = 'if $test == 1 or $test == 2 or $test == 3)';


Maintenant, ce n'est pas forcément la meilleure solution (enfin,
difficile à dire sans connaître le contexte, mais...). Perso, je
partirais plutôt sur un truc genre:

// NB : ce tableau peut of course être construit dans une boucle
$test_values = Array(1, 2, 3);
if (in_array($test, $test_values) {
// le code
}

Mais bon, je suppose que tu a de bonnes raisons pour avoir choisis une
autre soluce, donc...

HTH
--
bruno desthuilliers
ruby -e "print ''.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"

Avatar
CrazyCat
Jacques Meunier wrote:
$chaine = "if (test == 1 or test == 2 or test == 3)";
quand je fais
eval($chaine);
ca ne marche pas ... snif


heu, $chaine = "if (($test == 1) or ($test == 2) or ($test == 3))";
si tu fais un eval de "test", je ne pense pas que tu obtiennes grand
chose, il faut faire un eval de $test.

Je me trompe peut-être complètement, mais c'est une idée...

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.crazy-irc.net

Avatar
dmetzler
Essaye avec ça :

<?php
$test=2;
$chaine = " return ($test == 1 || $test == 2 || $test == 3);";

if(eval($chaine))
{
print "toto";
}

?>

Bon ça solutionneras ton problème mais as-tu *vraiment* besoin de
eval ? C'est une fonction dangereuse pas souvent activée sur tous les
serveurs....

A mon avis tu devrais pouvoir trouver une solutions plus académique.
Ce que tu veux c'est générer des conditions, dans le cas ci dessus on
aurais pu écrire :

<?php
$test=4;
$condition = 0;
for($i=1;$i<4;$i++) {
$condition |= $test == $i;
}


if($condition) print "toton";
?>

C'est quand même beaucoup plus propre et n'utilise pas la fonction
eval. eval sert à évaluer des chaines de code php que par exemple
l'utilisateur aurait pu rentrer. Si c'est ton code qui génère la
condition, tu dois être capable de la faire dans autre chose qu'une
chaine.
Avatar
loufoque
a dit le 22/07/2005 à 17:10:

$chaine = " return ($test == 1 || $test == 2 || $test == 3);";


C'est effectivement le return l'élement important, et ce n'est qu'à la
quatrième réponse que cela a été signalé...