Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1476 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHP : Calcul opération dans une variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP : Calcul opération dans une variable

n°1879439
jemsss
Posté le 29-04-2009 à 17:43:14  profilanswer
 


Bonjour,  
Je ne trouve pas comment calculer une opération enregistrée dans une variable en PHP.  
L'opération est entrée par les internautes grâce à des boutons dans un formulaire (style calculatrice). Je récupère les données et je les enregistre dans $operation.
Il doit bien y avoir une fonction ou une combine qui permette de transformer le texte d'une variable en opération. Mais je ne trouve pas.
 
Exemple :  
Le texte contenue dans $operation est "1+2*3"  
" echo $operation " me donne " 1+2*3 " or je voudrais qu'il affiche le résultat de l'opération : "7"  
 
J’ai essayer la fonction eval() mais ça ne marche pas.

Code :
  1. eval( "\$resultat = \"$operation\";" );
  2. echo $resultat;


Savez-vous comment faire?  
Merci d'avance

mood
Publicité
Posté le 29-04-2009 à 17:43:14  profilanswer
 

n°1879450
olivthill
Posté le 29-04-2009 à 18:01:03  profilanswer
 

Au lieu de :
eval( "\$resultat = \"$operation\";" );
Essayer :
eval("$resultat = $operation;" );

n°1879452
FlorentG
Unité de Masse
Posté le 29-04-2009 à 18:07:25  profilanswer
 

Cool, la plus grosse faille de sécurité jamais inventée [:moule_bite]
 
J'espère qu'il y a un contrôle du contenu :D

n°1879458
jemsss
Posté le 29-04-2009 à 18:21:50  profilanswer
 

J'ai essayer  
eval("$resultat = $operation;" );  
 
Le mass
Parse error: syntax error, unexpected '=' : eval()'d code on line 1

n°1879459
jemsss
Posté le 29-04-2009 à 18:24:50  profilanswer
 

J'ai essayé :
eval("$resultat = $operation;" );
 
Voici le message d'erreur
"Parse error: syntax error, unexpected '=' in C:\wamp\www\test.php(26) : eval()'d code on line 1"
 

n°1879516
guybrush02
Posté le 29-04-2009 à 21:53:25  profilanswer
 

$resultat est une variable du contexte d'exécution, que tu veux remplir, alors que $operation est une variable du contexte d'évaluation que tu veux lire. Même sans savoir comment fonctionne eval(), ça ne peut clairement pas marcher.  
Je pense que ça devrait plutôt être un truc du genre :  

Code :
  1. eval("$resultat = ".$operation.";" );


Pour que ce soit le contenu de $operation qui soit évalué, et non la variable.
 
[Edité : si eval porte sur le contexte d'exécution, ce sera plutôt  

Code :
  1. eval("$resultat = $operation" );


 ou n'importe quoi pour échapper $resultat]
 
[Edité bis : balise code]

Message cité 1 fois
Message édité par guybrush02 le 29-04-2009 à 21:56:06
n°1879522
FlorentG
Unité de Masse
Posté le 29-04-2009 à 22:31:15  profilanswer
 

Nan mais faut aussi à tout prix vérifier $operation, parce que sinon on peut faire exécuter ce qu'on veut

n°1879880
Profil sup​primé
Posté le 30-04-2009 à 17:12:42  answer
 

guybrush02 a écrit :

$resultat est une variable du contexte d'exécution, que tu veux remplir, alors que $operation est une variable du contexte d'évaluation que tu veux lire. Même sans savoir comment fonctionne eval(), ça ne peut clairement pas marcher.  
Je pense que ça devrait plutôt être un truc du genre :  

Code :
  1. eval("$resultat = ".$operation.";" );


Pour que ce soit le contenu de $operation qui soit évalué, et non la variable.
 
[Edité : si eval porte sur le contexte d'exécution, ce sera plutôt  

Code :
  1. eval("$resultat = $operation" );


 ou n'importe quoi pour échapper $resultat]
 
[Edité bis : balise code]


 [:o_non]  

Code :
  1. eval("\$resultat = $operation" );

n°1879881
Profil sup​primé
Posté le 30-04-2009 à 17:13:22  answer
 

FlorentG a écrit :

Nan mais faut aussi à tout prix vérifier $operation, parce que sinon on peut faire exécuter ce qu'on veut


c'est surtout qu'il faut pas utiliser eval()  :o

n°1879885
masklinn
í dag viðrar vel til loftárása
Posté le 30-04-2009 à 17:34:25  profilanswer
 

Code :
  1. $resultat = eval("return ($operation)" )


[:classe++]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 30-04-2009 à 17:34:25  profilanswer
 

n°1879889
Profil sup​primé
Posté le 30-04-2009 à 17:59:35  answer
 

masklinn a écrit :

Code :
  1. $resultat = eval("return ($operation)" )


[:classe++]


Code :
  1. $resultat = eval("return $operation;" );

n°1879909
guybrush02
Posté le 30-04-2009 à 18:52:28  profilanswer
 


C'est ce que je souhaitais écrire, mais je crois que je peine un peu avec la mise en forme du forum  :ange:  
 
Finalement, ça marche ou pas ? ^^

n°1879910
Profil sup​primé
Posté le 30-04-2009 à 19:02:21  answer
 

oui, mais utilise plutôt la solution de masklinn (on comprendra mieux d'où sort $resultat par la suite)

n°1879912
FlorentG
Unité de Masse
Posté le 30-04-2009 à 19:06:57  profilanswer
 

Et faut nous donner l'adresse du site, histoire qu'on s'amuse un peu  [:icon3]

n°1880061
jemsss
Posté le 01-05-2009 à 15:55:04  profilanswer
 

Salut tout le monde,
merci pour vos tuyaux. Malheureusement, j'essaye d'exécuter vos propositions avec wamp5 mais aucune ne fonctionne. J'ai toujours un message de ce type qui s'affiche:  
"Parse error: syntax error, unexpected '=' in C:\wamp\www\fichier.php(81) : eval()'d code on line 1"

n°1880062
jemsss
Posté le 01-05-2009 à 15:55:15  profilanswer
 


 
Au faite FlorentG, pourquoi est-ce si dangereux d'utiliser eval(). Les protections suivantes suffisent-elles ?
1. Je protège mes variables avec htmlspecialchars().
2. Je vérifie avec des regex de n'avoir aucun caractère autre que ceux utiliser.
 

n°1880064
FlorentG
Unité de Masse
Posté le 01-05-2009 à 15:58:47  profilanswer
 

A quel moment l'htmlspecialchars ? Et quelle regexp utilise-tu ?

n°1880068
jemsss
Posté le 01-05-2009 à 16:15:05  profilanswer
 

j'utilise htmlspecialchars en enregistrant ma variable $opération.

Spoiler :

$operation = htmlspecialchars($_POST['entree'])


 
Pour les regex, j'utilise le fonction preg_match() pour vérifier qu'il n'y que des caractères ou des expressions correspondant à une opération: 0,1,2,3,4,5,6,7,8,9,+,-,/,*,(,),sin(,cos(, sqrt( etc.

n°1880069
jemsss
Posté le 01-05-2009 à 16:15:52  profilanswer
 

$operation = htmlspecialchars($_POST['entree'])

n°1880071
jemsss
Posté le 01-05-2009 à 16:27:19  profilanswer
 

Je viens d'avoir ma réponse :
Voila ce qu'il fallait faire:
 

Code :
  1. echo eval("return $operation ;" );

n°1880073
FlorentG
Unité de Masse
Posté le 01-05-2009 à 16:35:26  profilanswer
 

L'htmlspecialchars là ne sert strictement à rien. Il ne faut le faire qu'à l'affichage :)
 
Sinon poste exactement la regexp histoire de voir

n°1880076
jemsss
Posté le 01-05-2009 à 16:50:01  profilanswer
 

Pourquoi l'htmlspecialchars ne sert à rien. Une fois que je l'utilise je sais que ma variable $operation je sais que cette dernière ne contient pas de code html lisible. Du moins c'est je que j'ai compris (ça fait pas longtemps que je fais du html)

n°1880077
FlorentG
Unité de Masse
Posté le 01-05-2009 à 16:54:40  profilanswer
 

Nan mais c'est pas à ce niveau là qu'il faut le faire, c'est uniquement lors de l'affichage. Pas avant de traiter l'opération

n°1880080
jemsss
Posté le 01-05-2009 à 16:59:22  profilanswer
 

ok, merci de l'info.
Sinon, tu penses qu'il y a besoin de sécuriser plus?

n°1880093
FlorentG
Unité de Masse
Posté le 01-05-2009 à 19:20:29  profilanswer
 

Justement, faut nous filer la regexp histoire qu'on y jette un œil :D

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP : Calcul opération dans une variable

 

Sujets relatifs
[PHP] Apostrophe formulaireQuestion simple sur PHP
[PHP].htaccess et erreur 403Formulaire et PHP.
[PHP] Intégration d'un champ 'joindre un fichier' dans un formulaireDurée de vie session PHP et image
Problème pour supprimer article en PHP/MySQLselenium variable
Variable dynamiqueCalcul de difference entre 2 dates dans 1 fichier 'Batch'
Plus de sujets relatifs à : PHP : Calcul opération dans une variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR