Aller au contenu

Interpretation mathematique d'une chaine


Sujets conseillés

Posté

Bonjour,

Peut être suis je sur un faux problème mais comment est il possible en php de calculer une expression contenue dans une chaine .

Exemple : $str= "2000 * 10";

Je voudrai qu'à l'affichage il m'affiche 20 000 et pas "2000 * 10" .

L'expression à calculer est forcément en String au départ pour mon besoin perso.

C'est tout bête mais je ne vois pas comment faire :blink:

Merci d'avance

Posté

Bonjour,

Pourquoi mettre des guillemets ?

Si tu les enlèves, c'est reglé non ?

<edit>Je viens de m'apercevoir que j'ai peut-être lu la question d'astrofiles un peu vite...</edit>

Posté

Bonjour,

eval devrait faire l'affaire ;)

$str= "2000 * 10";
eval("\$str=".$str.";");
echo $str;

Mais attention, si la chaîne provient d'un utilisateur cela représente de très gros risque...car l'utilisateur pourrait exécuter n'importe quel code PHP !

Posté

Les guillements sont là car il sagit d'une equation mathematique mémorisée en base de donnée dans un varchar.

Merci pour vos réponses j 'ai trouvé exactement ce que je cherchais, je le met ici ça peut servir..... ;)

function matheval($equation){
      $equation = preg_replace("/[^0-9+\-.*\/()%]/","",$equation);
      $equation = preg_replace("/([+-])([0-9]+)(%)/","*(1\$1.\$2)",$equation);
      // you could use str_replace on this next line
      // if you really, really want to fine-tune this equation
      $equation = preg_replace("/([0-9]+)(%)/",".\$1",$equation);
      if ( $equation == "" ) {
              $return = 0;
      } else {
              eval("\$return=" . $equation . ";");
      }
      return $return;
}

Source : http://fr.php.net/eval

Posté
Merci pour vos réponses j 'ai trouvé exactement ce que je cherchais, je le met ici ça peut servir..... ;)

<{POST_SNAPBACK}>

Est-ce que cela règle aussi le problème de sécurité ?

xpatval

Posté

Dans cette fonction, le code n'est passé dans eval qu'après avoir été nettoyé avec les différents preg_replace ... (tout ce qui n'est pas un chiffre, un opérateur, etc. est supprimé) ... alors à part ceci rien ne sera evalué.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...