calcul dans un champs

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 : calcul dans un champs

par guy » 07 janv. 2009, 09:59

merci calimero le support apres livraison est parfait et fonctionnel !
Dans mon cas meme pas besoin de tester les données entrées, c'est un script interne d'une partie protégée et si on essaye de rentréer autre chose qu'un nombre ben ... ca vas planter de toute maniere.

Guy

par blof » 06 janv. 2009, 15:56

Salut,

si tu tiens à le faire en PHP, comme l'a dit Calimero, il va falloir filtrer ce qui a été saisi.

<?php

$formule = '5*(4+6*( (7-8)/2.5))';

// on n'accepte que les espaces, chiffres, points, parenthèses, multiplications, divisions, additions et soustractions.
if(preg_match('#[^\s\d.()*/+-]#', $formule))
{
    echo $formule,' : formule non valide';
}
else
{
    if(@eval('$v='.$formule.';')===false)
    {
        echo $formule,' : formule non valide';
    }
    else
    {
        echo $formule,' = ',$v;
    }
}

?>
le filtre mis en place n'interdit pas les formules "complexes" qui pourraient consommer beaucoup de ressources (?)


Si tu ne souhaites qu'un calcul simple du genre : un nombre, un opérateur, un nombre :
<?php

$formule = '1.1 + 5';

if(preg_match('#^\s*(?:\d|\d+\.{0,1}\d+)\s*[/*+-]\s*(?:\d|\d+\.{0,1}\d+)\s*$#', $formule))
{
	eval('$v='.$formule.';');
	echo $formule,' = ',$v;
}
else
{
    echo $formule,' : formule non valide';
}

?>

par Calimero » 06 janv. 2009, 10:24

ce qui est le meme resultat que j'avait obtenu precedement.
Parceque tu as testé la version PHP, alors que je te recommandais pourtant l'autre ! :twisted:

Comme quoi un produit soldé n'est pas toujours une bonne affaire. Après un retour au SAV dans les règles et un passage par la case manuel, en php pour que mon code fonctionne j'aurais dû rajouter un return pour que la valeur puisse sortir proprement du code évalué pour arriver dans l'echo :
<?php echo eval('return (10+8)/3;'); ?>
En lisant attentivement mon premier post tu peux aussi remarquer que mes capacités de calcul mental diminuent pendant les soldes, ce qui peut parfois poser problème pour la facturation 8-) Pour la peine, c'est cadeau tout ça.

par guy » 06 janv. 2009, 10:04

desolé de mon faible niveau en php mais .... lorsque je teste ta ligne de code , je me retrouve avec
Parse error: syntax error, unexpected $end in /home/guy/public_html/test2.php(29) : eval()'d code on line 1
ce qui est le meme resultat que j'avait obtenu precedement.


2€ l'exemple parceque c'est les soldes.

tu fait le service apres vente aussi ??? meme en solde ??? ;-)


Guy

par Calimero » 06 janv. 2009, 00:30

2€ l'exemple parceque c'est les soldes. 8-)

Le voici :

Code : Tout sélectionner

<script type="text/javascript"> // Normalement ça donne un 2 tout ça ! window.alert(eval('(10+8)/3')); </script>
En php, presque pareil :
<?php echo eval('(10+8)/3'); ?>
L'idée c'est donc d'injecter des variables là dedans à la place des constantes. C'est pas bien dur :-) Ben justement, c'est trop facile... :evil:

Le problème étant qu'eval() peut éxécuter absolument n'importe quoi dans chacun des langages, selon leurs capacités respectives bien entendu (des opérations mathématiques ne sont pas dangereuses, mais imagine autre chose... genre la suppression de répertoires sur ton serveur pour la version php...). Donc il va falloir être TRES sévère (parano, sans éxagérer) sur le filtrage des variables que tu vas injecter dedans.

Rien de tel que les expressions régulières pour ça ! ;-)

par guy » 05 janv. 2009, 23:24

heuuu ... tu aurais pas un petit exemple en situation car la malgres mes efforts... je ne parvient a rien !

Guy

par Calimero » 05 janv. 2009, 22:29

eval() en php, mais surtout en javascript d'après ce que tu expliques, semble très adapté.

Attention, fonction très dangereuse (surtout en php) pour la sécurité de ton site. A n'utiliser qu'avec un formulaire parfaitement sécurisé ;-)

calcul dans un champs

par guy » 05 janv. 2009, 21:13

bonjour

j'ai un champs texte ou doit etre introduit un nombre, je desire que si l'utilisateur introduit un calcul simple, mon formulaire recoive le resultat de cette operation
par exemple :
l'utilisateur introduit 100+50 lorsque mon formulaire est envoyé, un pretraitment transforme le tout en 150.
Ceci avec un seul champs et des possibilite multiple (100 + 50 ou 100+50 ou 100+ 50 et ceci avec /-*+ et . en operateur de decimales)

Je ne sais pas trop par ou commencer .

Merci de votre aide

Guy