Why is this php calculator not working?

Asked

Viewed 325 times

0

<body>
<form role="form" action="pratica_fazer_calculadora.php" method="get">
    <input type="number" placeholder="Digite um número" name="primeiro_numero"/>
    <select>
        <option value="1">Soma</option>
        <option value="2">Subtração</option>
        <option value="3">Divisão</option>
        <option value="1">Multiplicação</option>
    </select>
    <input type="number" placeholder="Digite um número" name="segundo_numero"/>
    <button type="submit">Ver resultado</button>
</form>    

    <?php 
      $num_1 = $_GET ['primeiro_numero'];
      $num_2 = $_GET ['segundo_numero'];

      $operacao[1] = 1;
      $operacao[2] = 2;
      $operacao[3] = 3;
      $operacao[4] = 4;

      $resultado = null;

      if($operacao[1]){
          $resultado = ($num_1 + $num_2);
      }
      echo $resultado;

    ?>
</body>

The interesting thing is that no error message appears.

inserir a descrição da imagem aqui

  • 1

    What exactly isn’t working? What error returns?

  • 1

    There’s the problem. There’s simply no error message. It’s as if it took the data and disappeared with it.

  • The sum is happening, if you want the other operations to work, you need to define conditions for them too

  • I don’t know about you. But here the result is not printed on the screen. In yours it appears?

  • It worked here, but there’s some weird stuff on this calculator, I don’t know if it’s just a test, but there’s a lot of unnecessary stuff that can be simplified, I’ll post an example

  • @Bacco I tested his code here, and the sum(only operation) worked

  • 2

    "It’s like he takes the data and takes it away.".. rachei! rs :D

  • @Shinchila_matadora works in the sense that it will add unconditionally, because the value of item 1 of the array is 1. In practice "it seems to work" only. It would be like you making one echo 3 and say it works every time you test with 1 + 2 ...

Show 3 more comments

3 answers

5


Does not work because it was not programmed to work.

First of all, let’s put a name on select and fix item 4:

<select name="operacao"> <!-- aqui eu pus um "name" -->
    <option value="1">Soma</option>
    <option value="2">Subtração</option>
    <option value="3">Divisão</option>
    <option value="4">Multiplicação</option>
</select>

Then in PHP:

<?php 
  $num_1    = $_GET ['primeiro_numero'];
  $num_2    = $_GET ['segundo_numero'];
  $operacao = $_GET ['operacao'];           // recuperamos a operação

  if ($operacao == 1) {                     // e comparamos para ver qual usar
      $resultado = ($num_1 + $num_2);
  } else if ($operacao == 2) {
      $resultado = ($num_1 - $num_2);
  } else if ($operacao == 3) {

     // ... vai repetindo o elseif e fazendo as operações corretas ...
  }
  echo $resultado;

?>

I didn’t change the if for switch why I understand you are learning, but I recommend using in the future.

2

So I made some changes to the code and finished the file. I put a validation for the $_GET not to give error when you enter the page. And added a switch to perform the operations, is working normally.

<body>
<form role="form" action="pratica_fazer_calculadora.php" method="get">
    <input type="number" placeholder="Digite um número" name="primeiro_numero"/>
    <select name="operacao">
        <option value="1">Soma</option>
        <option value="2">Subtração</option>
        <option value="3">Divisão</option>
        <option value="4">Multiplicação</option>
    </select>
    <input type="number" placeholder="Digite um número" name="segundo_numero"/>
    <button type="submit">Ver resultado</button>
</form>

<?php
if (isset($_GET) && !empty($_GET)) {
   $num_1 = (double)isset($_GET ['primeiro_numero']) ? $_GET ['primeiro_numero'] : 0;
   $num_2 = (double)isset($_GET ['segundo_numero']) ? $_GET ['segundo_numero'] : 0;

    $resultado = null;

switch ($_GET['operacao']) {
    case 1:
        $resultado = ($num_1 + $num_2);
        break;
    case 2;
        $resultado = ($num_1 - $num_2);
        break;
    case 3;
        $resultado = ($num_1 / $num_2);
        break;
    case 4;
        $resultado = ($num_1 * $num_2);
        break;
}

    echo 'O Resultado é : ' .$resultado;
}
?>
</body>

inserir a descrição da imagem aqui

2

I did in a different way from the above companions just by consciousness disembowelment, and show other possibilities too.

Instead of defining a value right in the <option>, define that the operation takes place according to the name within the <option> available:

<body>
<form role="form" action="teste2.php" method="get">
    <input type="number" placeholder="Digite um número" name="primeiro_numero"/>
    <select name="operacao">
        <option>Soma</option>
        <option>Subtração</option>
        <option>Divisão</option>
        <option>Multiplicação</option>
    </select>
    <input type="number" placeholder="Digite um número" name="segundo_numero"/>
    <button type="submit">Ver resultado</button>
</form>    

    <?php 
      $num_1 = $_GET ['primeiro_numero'];
      $num_2 = $_GET ['segundo_numero'];
      $operacao = $_GET['operacao'];

      if($operacao == "Soma"){
          $resultado = ($num_1 + $num_2);
          echo $resultado;

      } else if($operacao == "Subtração"){
          $resultado = ($num_1 - $num_2);
          echo $resultado;

      } else if($operacao == "Divisão"){
          $resultado = ($num_1 / $num_2);
          echo $resultado;

      } else if($operacao == "Multiplicação"){
          $resultado = ($num_1 * $num_2);
          echo $resultado;
      }
    ?>
</body>

Browser other questions tagged

You are not signed in. Login or sign up in order to post.