astrofiles Posté 17 Mai 2006 Posté 17 Mai 2006 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 Merci d'avance
NorSeb Posté 17 Mai 2006 Posté 17 Mai 2006 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>
TheRec Posté 17 Mai 2006 Posté 17 Mai 2006 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 !
astrofiles Posté 17 Mai 2006 Auteur Posté 17 Mai 2006 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
xpatval Posté 17 Mai 2006 Posté 17 Mai 2006 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
TheRec Posté 17 Mai 2006 Posté 17 Mai 2006 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é.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant