Page 1 sur 1

Fonction

Posté : 10 avr. 2006, 18:43
par Ouaibou
Bonsoir,

Je récupère via un formulaire l'expression d'une fonction à 4 variables : a, b, c, d.

Dans une variable $expression, j'ai donc l'expression avec les inconnues a, b, c et d remplacées par des valeurs entières. J'obtiens donc une variable $expression du type suivant :
$expression = "(2*1*1-1-1+1)*(-1*1+1+1)(-2*1*0+1+0)";
Si je fais un echo de cette variable ça m'affiche la chaine de caractère correspondante. Or j'aimerai pouvoir afficher la valeur finale de cette expression une fois celle-ci calculée. Pour cela je me suis dit qu'avec un transtypage çela allé fonctionner :
echo (int) $expression;
Malheureusement, non ! :roll:

Cela me renvoie toujours 0.

Quelqu'un saurait-il m'aider ?

Merci d'avance.

Ps : J'ai beau chercher sur google, j'ai rien trouvé d'intéressant pour le moment :s

Cordialement,
Laurent

Posté : 10 avr. 2006, 21:41
par titerm
eval est ton amis...
eval("\$res=$expression;");
echo $res;

Posté : 11 avr. 2006, 02:56
par Hubert Roksor
Attention, eval() est l'incarnation de l'anti-Christ en PHP. Je vous laisse googler "php eval security" ou une autre combinaison du genre.

Si d'une façon ou d'une autre le calcul est en partie basé sur des données fournies par l'utilisateur (si c'est son numéro de téléphone ou même son user_id) alors utilise une vérification du genre
if (!preg_match('#^[0-9\\-\\+\\*/\\(\\)]+$#', $expression))
{
   die('WTF');
}
...pour t'assurer qu'$expression ne contient que des caractères autorisés.

Posté : 11 avr. 2006, 07:46
par Cyrano
Tes valeurs sont des entiers : en mettant ton expression entre guillemets, ça en fait une chaine de caractères qui ne sera pas traitée. Je te signale du reste une erreur : il manque quelque chose entre les parenthèses fermante et ouvrantes des deux derniers blocs. En supprimant les parenthèses, les calculs seront effectués normalement:
<?php
$expression1 = "(2*1*1-1-1+1)*(-1*1+1+1).(-2*1*0+1+0)";
echo("<p>". $expression1 ."</p>\n"); // Affiche (2*1*1-1-1+1)*(-1*1+1+1).(-2*1*0+1+0)
$expression2 = (2*1*1-1-1+1)*(-1*1+1+1).(-2*1*0+1+0);
echo("<p>". $expression2 ."</p>\n"); // Affiche 11
?>

Posté : 11 avr. 2006, 11:39
par Ouaibou
Salut

Merci, ça fonctionne parfaitement avec eval.

Cyrano > Effectivement j'ai pas testé mais tu dois avoir raison. Grrr comme quoi vaut mieux prendre son temps et faire gaffe.

@+