Foros del Web » Programando para Internet » PHP »

Ejecutar una función con Eval

Estas en el tema de Ejecutar una función con Eval en el foro de PHP en Foros del Web. Hola a todos: Tengo la siguiente duda, tengo por un lado un simple código ajax: $.ajax({ async: false, type: "POST", url: "procesar.php", data: { func: ...
  #1 (permalink)  
Antiguo 27/02/2014, 16:09
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Ejecutar una función con Eval

Hola a todos:

Tengo la siguiente duda, tengo por un lado un simple código ajax:

$.ajax({
async: false,
type: "POST",
url: "procesar.php",
data: {
func: "tres",
var1: 11,
var2: 22
},
success: function(data) {
alert(data);
}
});

Y por otro lado el fichero procesar.php que simplemente es una colección de funciones, algo así como:

function uno($a, $b) {
....
}
function dos($a, $b) {
...
}
function tres($a, $b) {
...
}

Quiero que este fichero procesar dependiendo de lo que reciba del ajax ejecute la función correspondiente y con los parámetros que también se envíen desde del ajax. Yo he intentado de varias maneras hacerlo con eval pero no me sale ninguna.

Debe ser algo así como:

$cadEjecutar = $_POST["func"]."(".$_POST["var1"].",".$_POST["var2"].")";

echo eval($cadEjecutar);

Pero nada, no me funciona, me da errores esa expresión. ¿Alguien se le ocurre alguna manera de hacerlo?

Gracias de antemano
  #2 (permalink)  
Antiguo 27/02/2014, 16:23
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Ejecutar una función con Eval

Una alternativa (de las muchas que hay) es eligiendo y ejecutando con una estructura selectiva a una de las funciones según sea el valor recibido.

Código PHP:
Ver original
  1. switch ($_POST['func']) {
  2.     case 'uno':
  3.         uno($_POST['var1'], $_POST['var2']);
  4.     break;
  5.  
  6.     case 'dos':
  7.         dos($_POST['var1'], $_POST['var2']);
  8.     break;
  9.  
  10.     case 'tres':
  11.         tres($_POST['var1'], $_POST['var2']);
  12.     break;
  13. }

Como dije al inicio, esta es sólo una de las muchas alternativas que deben haber para solucionar este inconveniente, estoy con algo de prisa y pues es con lo que puedo ayudarte por ahora.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 27/02/2014, 16:35
 
Fecha de Ingreso: junio-2007
Mensajes: 298
Antigüedad: 16 años, 10 meses
Puntos: 5
Respuesta: Ejecutar una función con Eval

Sí, esa es justamente la primera opción que yo elegí y escribí, pero estoy seguro que mediante eval (o alguna otra manera) se podría hacer en una sola línea. De todos modos muchas gracias por tu respuesta.
  #4 (permalink)  
Antiguo 27/02/2014, 17:41
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Ejecutar una función con Eval

Genial, avísame cuando tengas ese script en línea, para ver qué tan divertido puede ser probar de todo!

Basta leer el manual de PHP para saber porqué no es conveniente lo que pretendes:
Cita:
Precaución

El constructor de lenguaje eval() es muy peligroso porque permite la ejecución de código de PHP arbitrario. Su uso está totalmente desaconsejado. Si se ha verificado cuidadosamente que no existe otra opción que usar este constructor, se ha de poner especial atención en no pasar ninguna información proporcionada por el usuario a esta función sin haberla validado apropiadamente con anterioridad.

Enlace: http://www.php.net/eval
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: eval
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 12:58.