Foros del Web » Programando para Internet » PHP »

problemas con eval()

Estas en el tema de problemas con eval() en el foro de PHP en Foros del Web. Para resolver unas formulas en una base de datos hago: if (eregi('A',$form_mat) || eregi('B',$form_mat)){ $form_mat=str_replace('A',$alto,$form_mat); $form_mat=str_replace('B',$ancho,$form_mat); $valor_fmat=eval('$form_mat'); }else{ $valor_fmat=$form_mat; } las formulas son mas menos: ...
  #1 (permalink)  
Antiguo 18/08/2005, 15:33
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta problemas con eval()

Para resolver unas formulas en una base de datos hago:

if (eregi('A',$form_mat) || eregi('B',$form_mat)){
$form_mat=str_replace('A',$alto,$form_mat);
$form_mat=str_replace('B',$ancho,$form_mat);
$valor_fmat=eval('$form_mat');
}else{
$valor_fmat=$form_mat;
}

las formulas son mas menos:
((a*2)+(b*2))/12.000
pero hay algunas que son:
a
otras
1

topdos son medidas, o cantidades para una materia prima. la cosa es que en
$valor_fmat=eval('$form_mat');
me da un error:

Parse error: parse error in /srv/www/htdocs/Webfolders/devtec.cl/expo/menu/vent_presup/agregar.php(144) : eval()'d code on line 1


a ver si alguien me da una mano
Atte
Mauiricio Gonzalez
  #2 (permalink)  
Antiguo 18/08/2005, 15:47
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
Prueba esto:

Código PHP:
<?php
  $form_mat
="((a*2)+(b*2))/12.000";
  
$alto=100;
  
$ancho=100;
  
//cambia las letras a mayusculas
  
$form_mat=strtoupper($form_mat);
  
$form_mat=str_replace('A',$alto,$form_mat);
  
$form_mat=str_replace('B',$ancho,$form_mat);
  
//eval evalua codigo php, no olvidar eso, de el ; y lo demas
  
$valor_fmat=eval("\$valor= $form_mat;");
  echo 
"valor=$valor  y formula=$form_mat";
?>
  #3 (permalink)  
Antiguo 18/08/2005, 15:48
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno...

No utilices comillas simples porque entonces el valor de la variable $form_mat no se interpretará.
Código PHP:
$valor_fmat = eval($form_mat); 
Ya no tendrás el mismo error. Si obtuvieras algún otro error, sería buena idea que imprimas el valor de $form_mat en pantalla para ver que la sentencia se ha generado correctamente:
Código PHP:
echo $form_mat;
$valor_fmat = eval($form_mat); 
Saludos
  #4 (permalink)  
Antiguo 18/08/2005, 16:39
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 13 años, 2 meses
Puntos: 0
De acuerdo

Al poner banderas en el codigo, me aparece el resultado del eval como vacio...


haciendo de las dos formas recomendas, sacando las comillas y $valor_fmat=eval("\$valor= $form_mat;");

Uf, esto me esta haciendo transpirar....
Ojala tenga solucion.
Atte
mauricio gonzalez
  #5 (permalink)  
Antiguo 18/08/2005, 17:03
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 13 años, 2 meses
Puntos: 0
De acuerdo

ojo: en

http://www.forosdelweb.com/showthrea...problemas+eval
estaba la respuesta. Es decir hace casi tres años un amigo (bhonox) tubo un problema similar y escribio "por si acaso" la respuesta

no es

$algo = eval($otro);

sino

eval("\$algo = \"$otro\";");

Atte
Mauricio Gonzalez
  #6 (permalink)  
Antiguo 18/08/2005, 18:42
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
jejeje... tienes toda la razón... se me pasó.
Es que el error de la comilla simple es más notorio.
Aquí también ya lo había respondido yo mismo:
http://www.forosdelweb.com/showthrea...highlight=eval

Saludos
  #7 (permalink)  
Antiguo 18/08/2005, 18:51
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 13 años, 2 meses
Puntos: 0
te disculpom solo si me das una mano en:
http://www.forosdelweb.com/f18/dividir-326365/
Gracias
Atte
Mauricio Gonzalez
  #8 (permalink)  
Antiguo 22/08/2005, 09:53
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 13 años, 2 meses
Puntos: 0
sigo con problemas con el eval...

Tengo en el codigo
eval("\$valor_fcant = \"$form_cant\";");

pero al hacer:
$resultado =((($valor_fcant*$valor_fmat)/$f_conver)*($cantidad*$precio_material));

con esto valores:

valor_fcant :2
valor_fmat :1000+300
f_conver :1000
cantidad :1
precio_material :365.4

el resultado es:
Resuiltado : 730.8


en ves de :950,04

esto es por que eval no resolvio la suma.....

Uf, pense que lo tenia resuelto... pero no es asi.
Atte
Mauricio
  #9 (permalink)  
Antiguo 22/08/2005, 10:05
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 13 años, 7 meses
Puntos: 0
Si hiciste un echo a $valor_fcant del eval("\$valor_fcant = \"$form_cant\";"); y tiene dos, el eval está bueno.
__________________
Julio Hernández
  #10 (permalink)  
Antiguo 22/08/2005, 10:15
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 13 años, 2 meses
Puntos: 0
Busqueda

la cosa es que
valor_fmat :1000+300
y no 1300

al parecer la toma como si fuese una concatenacion y no una suma....

Atte
Mauricio
  #11 (permalink)  
Antiguo 22/08/2005, 10:34
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 13 años, 7 meses
Puntos: 0
Creo que hay funciones

http://mx.php.net/manual/en/function.settype.php
http://mx.php.net/manual/en/function.intval.php

busca en esos lados, creo que se puede resolver, sino multiplicá por *1 el valor, para que no concatene.
__________________
Julio Hernández
  #12 (permalink)  
Antiguo 22/08/2005, 10:36
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 13 años, 2 meses
Puntos: 0
De acuerdo

en
http://www.forosdelweb.com/showthrea...highlight=eval

estaba la solucion:

la cosa en concreto es:
$a=2; $b=3;
para resolver $c=$a+$b; (valores que estan en una base...)

$valor_fmat = eval("return ".$form_mat.";");

es entonces cuando devuelbe $c=5 y no la cadena 2+3.



Bueno eso era.
Atte
Mauricio



Pd.el amor te hace grande.
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 17:05.