Foros del Web » Programando para Internet » PHP »

Realizar cálculos

Estas en el tema de Realizar cálculos en el foro de PHP en Foros del Web. Hola a todos. Ante todo enhorabuena por el foro. Soy joanfran55 y tngo una dudilla. A ver partimos de un formulario donde el usuario introduce ...
  #1 (permalink)  
Antiguo 10/01/2013, 15:13
 
Fecha de Ingreso: enero-2013
Mensajes: 2
Antigüedad: 11 años, 3 meses
Puntos: 0
Realizar cálculos

Hola a todos. Ante todo enhorabuena por el foro. Soy joanfran55 y tngo una dudilla.

A ver partimos de un formulario donde el usuario introduce una operación

2*6+4 por ejemplo

en el archivo php

$calculo=$_POST['calculo'];



Si le digo

echo $calculo me da "2*6+4", y lo que quiero es que me dé el resultado, en este caso 16. He probado con eval sin éxito, y además es una función desaconsejada.

¿Alguna idea?

Gracias de antemano
  #2 (permalink)  
Antiguo 10/01/2013, 15:24
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Realizar cálculos

Hay veces que usar eval puede ser mejor que darle más vueltas, además, eval no es el demonio si lo usas bien. ¿por qué no funcionó, cómo lo usaste?

Por otro lado, quizá usando un mini analizador sintáctico podrías ir obteniendo los caracteres numéricos por un lado y los signos de operación por otro.
  #3 (permalink)  
Antiguo 10/01/2013, 18:09
Avatar de abimex
Colaborador
 
Fecha de Ingreso: marzo-2007
Ubicación: ~
Mensajes: 751
Antigüedad: 17 años, 1 mes
Puntos: 137
Respuesta: Realizar cálculos

lo puedes hacer con javascript, porque usar eval con la entrada de un input es muy inseguro,
hice algo similar aqui
http://jsfiddle.net/4wGRF/
es solo un prototipo para que veas que funciona :P
Saludos
__________________
>> abimaelmartell.com
  #4 (permalink)  
Antiguo 10/01/2013, 18:22
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Realizar cálculos

Lo primero es saber exactamente qué operadores piensas permitir.Si son sólo multiplicar, dividir, parentesis, etc, y cualquier expresión que quieras permitir, es una expresión php (o javascript) válida, podrías usar eval().

Eval es peligroso...Pues, en este caso en concreto, que vas a utilizar directamente lo que te escribe un usuario...si, (en php), y no, (en javascript).
Tendrías que validar primero lo que el usuario escribiera.Lo cual es moderadamente sencillo si no permites cosas como operadores unarios (ej: -1*2), etc.

Ahora bien,en cuanto la sintaxis que quieras permitir en las operaciones, no sea la misma que en php (o js), tendrás que descartar eval...y la cosa se pone más compleja (parseadores manuales, motores LALR)
  #5 (permalink)  
Antiguo 12/01/2013, 18:24
 
Fecha de Ingreso: enero-2013
Mensajes: 2
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Realizar cálculos

Gracias por vuestra ayuda. Eval no es peligroso, y ya funciona.
Del modo que lo voy a hacer (con operadores matemáticos sumar restar dividir y multiplicar) no hay peligro visible porque el $_post está forzado a únicamente contener números + - * / y paréntesis y a tener una longitud máxima que no permita ningún mal script. Espero tener suerte, de veras, no he tenido más remedio que recurrir a eval.

Gracias nuevamente
  #6 (permalink)  
Antiguo 12/01/2013, 19:00
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Realizar cálculos

Con una buena expresión regular, creo que no habría problema con eval, aunque no la recomiendan usar y existen clases para hacer lo que buscas, como por ejemplo:

https://gist.github.com/1232629

o esta otra

http://www.phpclasses.org/browse/file/11680.html

Ambas realizan un proceso largo, pero es posible.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Etiquetas: formulario, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:01.