Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Mi calculadora no resuelve

Estas en el tema de Mi calculadora no resuelve en el foro de PHP en Foros del Web. Hola amigos, para terminar de sacar informatica me pidieron una calculadora simple, que solo resuelva la operacion, sin nada mas complejo. Bien, el problema es ...
  #1 (permalink)  
Antiguo 26/02/2015, 14:53
 
Fecha de Ingreso: noviembre-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Mi calculadora no resuelve

Hola amigos, para terminar de sacar informatica me pidieron una calculadora simple, que solo resuelva la operacion, sin nada mas complejo. Bien, el problema es que en el lugar donde tendria que aparecer el resultado aparece la operacion que el usuario hizo. Si no me explico bien les dejo una foto



En vez de mostrar 10, muestra 7+3. Bueno eso es todo, espero que puedan solucionar mi problema. Aca dejo el codigo :) . Muchas gracias


Código PHP:
<form name="formulario" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> 
Operacion: <input type="text" name="calculadora" value=""> <p>
<input type="submit" /><p>
</form>
</div>
<?php
$resultado
=$_POST['calculadora'];  
echo 
"Resultado: $resultado";
?>
  #2 (permalink)  
Antiguo 26/02/2015, 15:03
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Mi calculadora no resuelve

hola..

puedes usar la funcion nativa eval de php, aunque no es recomendable ...
[/HIGHLIGHT]
  #3 (permalink)  
Antiguo 26/02/2015, 15:15
 
Fecha de Ingreso: noviembre-2012
Mensajes: 21
Antigüedad: 12 años
Puntos: 1
Respuesta: Mi calculadora no resuelve

Gracias, excelente, dejo el codigo por si alguien tiene el mismo problema que yo. Aunque me pueden explicar porque es peligroso usar eval() ?

Aca el codigo:

Código PHP:
<form name="formulario" method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> 
Operacion: <input type="text" name="calculadora" value=""> <p>
<input type="submit" /><p>
</form>
</div>
<?php
$resultado
=$_POST['calculadora'];  
$resultadofinal="echo $resultado;"
eval(
$resultadofinal); 
?>
  #4 (permalink)  
Antiguo 26/02/2015, 15:28
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Mi calculadora no resuelve

Cita:
Iniciado por valenfontana11 Ver Mensaje
Aunque me pueden explicar porque es peligroso usar eval() ?
Eso se explica en el manual: http://php.net/manual/es/function.eval.php

Extracto:
Cita:
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.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 26/02/2015, 17:45
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Mi calculadora no resuelve

Una calculadora que sume, reste, multiplique y divida puede ser implementada de forma simple y segura así:
Código PHP:
Ver original
  1. <?php
  2.     // La operación a resolver.
  3.     $op = "7 + 5 - 4 / 2 + 3 * 2";
  4.  
  5.     // Eliminar espacios y caracteres @ existentes, luego agregar un @ antes de cada signo y al final de la formula.
  6.     $op = str_replace(["@", " ", "+", "-", "*", "/"], ["", "", "@+", "@-", "@*", "@/"], $op)."@";
  7.  
  8.     // Variables a usar.
  9.     $final = 0; // Acumulador, almacena el resultado final.
  10.     $parcial = 0; // Acumulador, almacena el resultado parcial de cada termino.
  11.     $signo = "+"; // Indicador, almacena el ultimo signo empleado, por defecto suma.
  12.  
  13.     // Recorrer cada numero y operación de la formula de forma implicita.
  14.     // Se usa la variable original como iteradora para ahorrar memoria.
  15.     foreach(explode("@", $op) as $op)
  16.     {
  17.         // Si es una operación de alta prioridad se procesa dentro del termino parcial.
  18.         if($op[0] == "*" || $op[0] == "/") // El primer carácter es la operación.
  19.             $parcial *= ($op[0] == "*" ? substr($op, 1) : 1/substr($op, 1)); // Multiplicar o dividir.
  20.         else
  21.         {
  22.             // Si es una operacion de baja prioridad se procesa dentro del resultado final.
  23.             $final += $parcial * ($signo == "+" ? 1 : -1); // Sumar o restar.
  24.  
  25.             // Si el numero tiene un signo.
  26.             if($op[0] == "+" || $op[0] == "-")
  27.             {
  28.                 $parcial = substr($op, 1); // Guardar el numero sin signo.
  29.                 $signo = $op[0]; // Guardar el signo.
  30.             }
  31.             else // Es un numero sin signo, Ej: el primer numero de la formula.
  32.                 $parcial = $op;
  33.         }
  34.     }
  35.     unset($parcial, $signo, $op); // Liberar la memoria.
  36.     echo $final; // Mostrar el resultado.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 26/02/2015 a las 17:56

Etiquetas: calculadora, operacion
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 09:13.