Fonction

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonction

par Ouaibou » 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.

@+

par Cyrano » 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
?>

par Hubert Roksor » 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.

par titerm » 10 avr. 2006, 21:41

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

Fonction

par Ouaibou » 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