entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Mi problema es que estoy creando un programa donde uso funciones matemáticas propias de php.
El usuario debe ingresar por un formulario la función a calcular, la cual debe ser respecto a una sola variable que para este caso seria la variable x .
resulta que el dato ingresado yo lo recibo como una cadena de texto, una vez lo recibo utilizo la función str_replace para remplazar los valores reales dentro de la función es decir donde se encuentre la variable x.
Pasa que en php hay unas funciones que llevan la variable x mas específicamente la función exp() función que calcula el exponente de e. Cuando el usuario ingresa esta función el programa no le calcula nada porque también me ha reemplazado la x con la que esta escrita la función. Mi pregunta entonces es que si hay alguna forma para que cuando se encuentre una función que incluya esta letra (x) no me haga ese remplazo.

Gracias por su atención y quedo a la espera de alguna solución a mi problema.

1voto

Leonardo-Tadei comentado

Hola @saramaran,

tal vez si pusieras pa porción de código que usás para hacer el análisis de la entrada y la ejecución, se podrían aportar algunas soluciones.

Se me ocurre que, dado que str_replace() no permite poner excepciones, haya que usar un enfoque distinto para obtener un algoritmo elegante...

1voto

saramaran comentado

La porción de código la tengo de esta manera
tomo la función que ingresa el usuario para este caso, un ejemplo seria
fx=exp(-x)-long(x)
luego le aplico str_replace("x",$z,$fx). La variable $z vendría hacer el valor numérico con el que voy a reemplazar a la variable x.

1voto

Leonardo-Tadei comentado

Me refería a una porción de código tal que se entienda el algoritmo completo que estás usando, desde la verificación sintáctica de la expresión que ingresa el usuario hasta la ejecución del cálculo.

Esa sola línea de código se deduce de la pregunta, pero al menos a mi, me sigue faltando el resto del contexto... no sea cosa que tu software falle por introducir mal una expresión o que permita la ejecución de código arbitrario...

1 Respuesta

2votos

magarzon Puntos30650

Tienes tres opciones:

  • Indicar al usuario que en el nombre de la variable no use x, si no algo como --x--
  • Utilizar preg_replace, que hace lo mismo que str_replace pero utilizando expresiones regulares, aunque aquí te tienes que currar la expresión regular que tenga coincidencia con todas las posibles opciones donde el usuario puede meter la variable x
  • Tener un "diccionario" de funciones permitidas, de manera que puedes parsear la entrada y ver qué función quiere utilizar el usuario y en función de eso, sabes en qué posición está la variable. También puedes usar expresiones regulares aquí para definir todas tus posibilidades. Además, de esta manera, también estarías asegurándote que el usuario no te mete algún código malicioso que vayas a intentar ejecutar en el servidor.

1voto

saramaran comentado

Hola, gracias por responder, pues por ahora la solución que le he dado, es escribir esa misma función como una potencia aprovechando que en php también hay definida una constante para esa misma función.
En vez de utilizar la función exp(x) utilizo pow(M_E,x) de esa forma si no me genera problema.
Me quedaría entonces esa misma función que quiero exp(x)-log(x) como pow(M_E,x)-log(x).

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta