Calculator in php

2

How do I make a calculator in php? I made the code but it does not display result.

<!DOCTYPE HTML>
<html lang = "pt-br">
    <head>
        <title> Exemplo</title>
        <meta charset = "UTF-8">
    </head>
    <body>
        <form action=calculadora.php" method="get" >
            Primeiro Numero: <input name="num1" type="text" />
            Segundo numero: <input name="num2" type="text" /> 
            Operacao (quatro operações):  <input name="operacao" type="text" /> 
            <input type="submit" value="Calcular" />     
    </form> 
    <?php
        $a = $_GET "num1";
        $b = $_GET "num2";
        $op =$_GET "operacao";
        $c = []
        if($op == "soma")
            $c = $a + $b;
            //echo $c = "resultado";
        else if($op == "subtracao")
            $c = $a - $b;
            //echo $c = "resultado";
        else if($op == "multiplicacao")
            $c = $a*$b;
            //echo $c = "resultado";
        else
            $c = $a/$b;
         echo "O resultado da operação é: $c";
    ?>      
    </body>
</html>
    
asked by anonymous 04.04.2014 / 20:07

4 answers

7

Follow the code set as suggested by @ lost, but using POST method and buttons. I tried to maintain the simplicity of the original by adding some small details to illustrate the value of the submit , and no more subtleties.

<!DOCTYPE HTML>
<html lang = "pt-br">
<head>
   <title>Exemplo</title>
   <meta charset = "UTF-8">
</head>
<body>
   <form action="" method="post" >
      Primeiro Numero: <input name="num1" type="text"><br>
      Segundo numero: <input name="num2" type="text"><br>
      <input type="submit" name="operacao" value="+">     
      <input type="submit" name="operacao" value="-">     
      <input type="submit" name="operacao" value="*">     
      <input type="submit" name="operacao" value="/">     
   </form> 
<?php

   $a = $_POST['num1'];
   $b = $_POST['num2'];
   $op= $_POST['operacao'];

   if( !empty($op) ) {
      if($op == '+')
         $c = $a + $b;
      else if($op == '-')
         $c = $a - $b;
      else if($op == '*')
         $c = $a*$b;
      else
         $c = $a/$b;

      echo "O resultado da opera&ccedil;&atilde;o &eacute;: $c";
   }

?>       
</body>
</html>
    
04.04.2014 / 20:22
3

To access values from a form use the syntax below.

   $a = $_GET['nome_do_campo_html']

and not

 $a = $_GET "num1";
    
04.04.2014 / 20:12
1

1st - We will use a FORM (HTML)

<!-- Método: $_POST | Action em branco porque executaremos na própria página -->
        <form method="post" action="">
            <!-- Input que receberá o primeiro valor a ser calculado -->
            <input type="text" name="v1" placeholder="Valor 1" />

            <!-- Select com o tipo de operação (Somar, Diminuir, Multiplicar ou Dividir -->
            <select name="operacao">
                <option value="soma">+</option>
                <option value="subtrai">-</option>
                <option value="multiplica">*</option>
                <option value="divide">/</option>
            </select>

            <!-- Input que receberá o segundo valor a ser calculado -->
            <input type="text" name="v2" placeholder="Valor 2" />

            <!-- Input que enviará os valores para a função de cálculo -->
            <input type="submit" name="doCalc" value="Calcular" />
        </form>

2nd - The .PHP file with the calculation function

<?php
        # classe :: Calculadora
        class Calculadora {

            # Função "Calcular" para executar o cálculo dos valores (v1 e v2)
            public function Calcular() {

                # Se for setado algum valor ào submit (doCalc), executa a operação
                if (isset($_POST['doCalc'])) {

                    # Se a operação for soma (value = soma), então...
                    if ($_POST['operacao'] == "soma") {

                        # Armazena a soma de [v1 + v2] na variável $resultado
                        $resultado = $_POST['v1'] + $_POST['v2'];

                        # Exibe a variável $resultado com os valores já somados
                        return $resultado;

                        # Ou então, se a operação não for (value = soma), e sim (value = subtrai) então...
                    } elseif ($_POST['operacao'] == "subtrai") {
                        $resultado = $_POST['v1'] - $_POST['v2'];
                        return $resultado;
                    } elseif ($_POST['operacao'] == 'multiplica') {
                        $resultado = $_POST['v1'] * $_POST['v2'];
                        return $resultado;
                    } elseif ($_POST['operacao'] == 'divide') {
                        $resultado = $_POST['v1'] / $_POST['v2'];
                        return $resultado;
                    }
                }
            }

        }

        # Instancia a classe CALCULADORA()
        $calcular = new Calculadora();

        # Executa a função
        echo $calcular->Calcular();
        ?>

I know you have shorter and more objective ways to do it, but this is one of the simplest.

    
04.04.2014 / 20:11
1

You can do this with just one line:

echo call_user_func(['+' => 'bcadd', '-' => 'bcsub', '*' => 'bcmul', '/' => 'bcdiv'][$_POST['operacao']] ?? 'bcadd', $_POST['num1'], $_POST['num2'], 2);

You can use BCMath in combination with call_user_func , which you can call it, BCMath is more accurate for multiplication.

The call_user_func allows you to call any function through the name. This can be dangerous if you allow the user to enter any value, because as a result the user can also call any PHP function. In this case, there is an array that defines which functions are allowed to be used, and will use bcadd by default if another value is sent.

To get a little easier to understand:

<?php

// Definimos os valores padrões do POST:
$_POST = array_replace(['op' => '+', 'a' => 0, 'b' => 0], $_POST);

// Definimos as operações suportadas e sua função no BCMath:
$ops = ['+' => 'bcadd', '-' => 'bcsub', '*' => 'bcmul', '/' => 'bcdiv', '**' => 'bcpow', '%' => 'bcmod'];

// Encontramos a função baseado na entrada do usuário. Caso não for suportado a operação, etnão o '+' será usado como padrão:
$op = $ops[$_POST['op']] ?? $ops['+'];   

// Fazemos chamamos a função usando os valores de A e B:
$resultado = call_user_func($op, $_POST['a'], $_POST['b'], 2);

?>
<!DOCTYPE HTML>
<html lang="pt-br">
<form action="#" method="post">
    <br>A: <input name="a" type="number" step="any"
                  value="<?= htmlentities($_POST['a'], ENT_QUOTES | ENT_HTML5, 'UTF-8') ?>">
    <br>B: <input name="b" type="number" step="any"
                  value="<?= htmlentities($_POST['b'], ENT_QUOTES | ENT_HTML5, 'UTF-8') ?>">
    <br><?php
    foreach ($ops as $n => $_) {
        echo '<input type="submit" name="op" value="' . $n . '">';
    }
    ?>
    <br> Resultado: <input readonly value="<?= $resultado ?>">
</form>
</html>
19.05.2018 / 17:49