Opération mathématique fournie par l'utilisateur

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 : Opération mathématique fournie par l'utilisateur

Re: Opération mathématique fournie par l'utilisateur

par sirakawa » 23 oct. 2013, 20:14

Je persiste à dire qu'il faut un véritable analyseur, ou une regex particulièrement soignée, encore que les liens que j'ai vus pensent en général que les regex ne suffisentp as
Il y a ça que je n'ai pas testé:
https://gist.github.com/ircmaxell/1232629

Re: Opération mathématique fournie par l'utilisateur

par blof » 23 oct. 2013, 16:07

Dans ton code remplace eval par echo, tu vas tout de suite comprendre :)

Re: Opération mathématique fournie par l'utilisateur

par Cur3 » 23 oct. 2013, 15:06

J'ai essayé d'utiliser la fonction eval !
Seulement, ça marche pas. Je dois sûrement mal m'y prendre.
<?php
$operation = $_POST['operation'];
echo '$operation :';
var_dump($operation);

eval('$resultat = $operation;');

echo '$resultat :';
var_dump($resultat);
?>
Et voici le résultat pour $_POST['operation'] = '5+5' :

Image

Donc en fait vu que $_POST['operation'] est de type string, je n'arrive pas à exécuter l'opération via eval.
Quand je convertit $POST['operation'] en int, c'est encore pire : "5+5" se transforme en "5".

Où est-ce que c'est que je me trompe ?

Re: Opération mathématique fournie par l'utilisateur

par sirakawa » 23 oct. 2013, 08:01

google:
automates à piles
C'est une méthode d'analyse syntaxique qui sert entre autres à transformer une exp math en polonaise inversée.

Re: Opération mathématique fournie par l'utilisateur

par blof » 21 oct. 2013, 15:53

Bonjour,
Je ne saurais pas faire une expression régulière aussi complexe
moogli proposait de vérifier avec une expression régulière qu'il n'y ait que des "chiffres parenthèses le point et les opérateurs mathématiques voulue"

Donc si il y a autre chose que des "chiffres parenthèses le point et les opérateurs mathématiques voulue" => on n'utilise pas eval()

D'abord un tuto qui explique tout :
http://lumadis.be/regex/tuto_pcre.php
et en particulier :
http://lumadis.be/regex/tuto_pcre.php#classecar

un exemple avec juste les chiffres et le point :
<?php
$v='123.4';
if(preg_match('#[^0-9.]#', $v))
{
	echo 'nok';
}
else
{
	echo 'ok';
}
?>
attention : dans une classe de caractères, le caractère "-" (moins) a une signification particulière, il faut donc le protéger par un anti-slash (\-).

Rq : avec cette méthode on ne sait pas si l'opération arithmétique est valide, mais au pire on aura un "parse error" (qu'on peut cacher)

Relis bien l'avertissement de la commande eval()

Re: Opération mathématique fournie par l'utilisateur

par Cur3 » 20 oct. 2013, 19:12

Salut,

Tu peux utiliser la fonction eval pour cela mais attention a ce que l'on pourrait y passer ce serait une faille de sécurité.
Tu peux valider une opération mathématique avec une expression régulière (chiffres parenthèses le point et les opérateurs mathématiques voulue).
@+
Salut,
Je vais regarder du coté de la fonction eval. Merci ! ;)
Je ne saurais pas faire une expression régulière aussi complexe. N'en existe-t-il pas déjà ?

Tu peux te pencher sur les automates à pile : validation et calcul simultanés.
Qu'est-ce que les automates à pile ?

Re: Opération mathématique fournie par l'utilisateur

par sirakawa » 20 oct. 2013, 10:19

Tu peux te pencher sur les automates à pile : validation et calcul simultanés.

Re: Opération mathématique fournie par l'utilisateur

par moogli » 19 oct. 2013, 20:37

Salut,

Tu peux utiliser la fonction eval pour cela mais attention a ce que l'on pourrait y passer ce serait une faille de sécurité.
Tu peux valider une opération mathématique avec une expression régulière (chiffres parenthèses le point et les opérateurs mathématiques voulue).


@+

Opération mathématique fournie par l'utilisateur

par Cur3 » 19 oct. 2013, 18:10

Bonjour ! :)
Je ne sais pas si ce sujet a vraiment se place dans "PHP avancé", mais bon je ne pense pas non plus qu'il devrait être dans "PHP débutant". Bref.

J'ai besoin de calculer une opération mathématique fournie et transmit par l'utilisateur via POST ou GET. Exemple :

page.php?v=(2+5)*8-1+(8/4)
Je veux pouvoir, en traitant $_GET['v'], récupérer le nombre 57. J'ai besoin de pouvoir calculer cette opération.
Or, pour PHP ce n'est que du texte, ce qui est tout à fait logique.

Ça doit être possible à coups de loooongues Regex, mais je n'y arriverais pas.

Quelqu'un sait-il comment faire ? Merci ! :D