Faire un calcul dans une chaîne

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 : Faire un calcul dans une chaîne

par Hywan » 02 avr. 2008, 17:32

Merci, mais on sait qu'il est bien notre forum :roll:.

Plus sérieusement, l'eval est une bonne solution dans ton cas mais attention à la sécurité ! Il faut s'assurer que l'utilisateur ne rentre que des formules, et ce n'est pas franchement évident.
Imagine que je renseigne : require 'http://phpfrance.com';, ce serait une catastrophe[1].
Pense donc à protéger convenablement tes chaînes, même si je pense qu'il restera toujours des failles avec ce système :?.

[1] C'est pas PHPFrance la catastrophe hein ;-).

par thierrys » 02 avr. 2008, 17:17

Un grand merci.

Je voulais aussi rajouter, que ce forum est vraiment très bien, car les réponses sont simples et rapide.

par Ryle » 02 avr. 2008, 17:09

Pour explode, il n'est valable que si tu as toujours le même opérateur et en splittant la chaine sur cet opérateur (comme c'était pas pécisé, je proposais au cas où, mais effectivement, si on met ce qu'on veut comme calcul, ça ne fonctionnera pas)

Pour le eval, il faut lui passer une chaine en paramètre, qui sera exécutée comme s'il s'agissait de code php.

Mettons que tu veuilles obtenir l'exécution du code :
$resultat = 0.4 * 2 / 3;
Il te faut donc écire :
eval('$resultat = 0.4 * 2 / 3;');
et on remplace la chaine du calcul par ta variable, ce qui donne :
$Calcul = "0.4 * 2 / 3"; 
eval('$resultat = '.$Calcul.';');

echo $resultat; // doit afficher 0.26

par thierrys » 02 avr. 2008, 16:34

Merci pour ta réponse.

Mais pourrais tu me donner un exemple de script.

1/ Pour Eval
$Calcul = "0.4*2";
$test = eval('$Calcul;');
var_dump ($test);
Le résultat donne Null.

2/Pour Explode
$Calcul = "0.4*2/3";
$Calcul2 = explode(" ",$Calcul);
print_r ($Calcul2); 
Le résultat donne
Array "( [0] => 0.4*2/3 )"

par Ryle » 02 avr. 2008, 15:24

tu dois pouvoir utiliser la fonction eval(), mais il va te falloir être très rigoureux sur les contrôles à mettre en place pour que l'utilisateur ne puisse pas mettre n'importe quoi dedans...

Après s'il n'y a que des multiplications, un explode peut également te donner les différentes valeurs dans un tableau...

Faire un calcul dans une chaîne

par thierrys » 02 avr. 2008, 15:11

Bonjour,
J'ai un petit souci :
J'ai une variable qui correspond à un calcul :
$calcul = "0.2*0.6*10";
L'utilisateur va indiquer la formule qui remplira la variable "$calcul".
L'intérêt est de conserver en mémoire le calcul initial.
La formule étant fréquemment différentes.
je souhaite obtenir la somme de la variable pour la multiplier à une quantité.
Si quelqu'un pouvait m'aider cela serait sympa.