Fonction

Eléphant du PHP | 281 Messages

10 avr. 2006, 18:43

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

Mammouth du PHP | 505 Messages

10 avr. 2006, 21:41

eval est ton amis...
eval("\$res=$expression;");
echo $res;

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

11 avr. 2006, 02:56

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.

Mammouth du PHP | 19672 Messages

11 avr. 2006, 07:46

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
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 281 Messages

11 avr. 2006, 11:39

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.

@+