Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Operações com PHP

Esta recebendo o seguinte erro ao abrir o arquivo html Notice: Undefined index: operacao in C:\xampp\htdocs\calculos\funcoes.php on line 2

código funcoes.php

<?php
    $op = $_POST['operacao'];
    $resultado = "";
    $numero1 = "";
    if (isset( $_POST['numero1'])){
       $numero1 = $_POST['numero1'];
    }
    $numero2 ="";
    if (isset( $_POST['numero2'])){
        $numero2 =$_POST['numero2'];
    }
    if ($numero1 != "" && $numero2 != ""){

        switch($op){
            case 'Somar':
        $valor_resultado = $numero1+$numero2;
        $resultado = "R$ " .number_format($valor_resultado, 2,',','.');
            break;

            case 'Subtrair':
        $valor_resultado = $numero1-$numero2;
        $resultado = "R$ " .number_format($valor_resultado, 2,',','.');
            break;

            case 'Multiplicar':
        $valor_resultado = $numero1*$numero2;
        $resultado = "R$ " .number_format($valor_resultado, 2,',','.');
            break;

            case 'Dividir':
        $valor_resultado = $numero1/$numero2;
        $resultado = "R$ " .number_format($valor_resultado, 2,',','.');
            break;
        }
    }

?>

Código index.html

<?php include ('funcoes.php');?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <title>Trabalahndo com Calculos no PHP</title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <div>
            <h1>SOMA </h1>
                <form method="POST" action="index.php">
            Número 1: <input class="form-control" type="number" step="any" name="numero1"><br/>
            Número 2: <input class="form-control" type="number" step="any" name="numero2"><br/>
            Resultado: <input class="form-control" type="text" name="resultado" value="<?php echo $resultado; ?>"><br/>
            <input class="btn btn-info" type="submit" name="operacao" value="Somar">
            <input class="btn btn-danger" type="submit" name="operacao" value="Subtrair">
            <input class="btn btn-success" type="submit" name="operacao" value="Multiplicar">
            <input class="btn btn-primary" type="submit" name="operacao" value="Dividir">
                   </form>
        </div>
    </div>


<script type="text/javascript" src="js/bootstrap.min.js"></script>
</body>
</html>
6 respostas

ola, tente testar se $_POST['operacao'] esta setado

if isset($_POST['operacao']) ...

acontece que quando voce da include, o codigo é executado mesmo que o form nao esteja preenchido.

solução!

Eu recomendo você fazer da seguinte forma:

funcoes.php


<?php
    $resultado = "";
    if (isset($_POST['operacao'])){
        $op = $_POST['operacao'];

        $numero1 = "";
        if (isset( $_POST['numero1'])){
           $numero1 = $_POST['numero1'];
        }
        $numero2 ="";
        if (isset( $_POST['numero2'])){
            $numero2 =$_POST['numero2'];
        }
        if ($numero1 != "" && $numero2 != ""){

            switch($op){
                case 'Somar':
                $valor_resultado = $numero1+$numero2;
                $resultado = "R$ " .number_format($valor_resultado, 2,',','.');
                break;

                case 'Subtrair':
                $valor_resultado = $numero1-$numero2;
                $resultado = "R$ " .number_format($valor_resultado, 2,',','.');
                break;

                case 'Multiplicar':
                $valor_resultado = $numero1*$numero2;
                $resultado = "R$ " .number_format($valor_resultado, 2,',','.');
                break;

                case 'Dividir':
                if ($numero1 != 0 && $numero2 != 0){
                    $valor_resultado = $numero1/$numero2;
                } else {
                    $valor_resultado = 0;
                }
                $resultado = "R$ " .number_format($valor_resultado, 2,',','.');
                break;
            }
        }
    }

?>

index.html

<?php include ('funcoes.php');?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <title>Trabalahndo com Calculos no PHP</title>
    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
</head>
<body>
    <div class="container">
        <div>
            <h1>SOMA </h1>
                <form method="POST" action="index.php">
            Número 1: <input class="form-control" type="number" step="any" name="numero1"><br/>
            Número 2: <input class="form-control" type="number" step="any" name="numero2">

            Tipo de operação:
            <select name="operacao">
                <option value="Somar">Somar</option>
                <option value="Subtrair">Subtrair</option>
                <option value="Multiplicar">Multiplicar</option>
                <option value="Dividir">Dividir</option>
            </select>
            <br/>
            Resultado: <input class="form-control" type="text" name="resultado" value="<?php echo $resultado; ?>"><br/>

            <input class="btn btn-primary" type="submit" name="btn_operacao" value="Calcular">
          </form>
        </div>
    </div>


<script type="text/javascript" src="js/bootstrap.min.js"></script>
</body>
</html>

Olá Tacio. Bom dia!

Vale lembrar que, caso esteja utilizando o PHP 7, poderá fazer uso do null coalesce operator (??), dependendo do seu objetivo.

Sou iniciante amigo Rafael Affonso , esses exemplos que passei é eu estudando. mais se o amigo pode posta um exemplo usando a dica passada fico grato.

Opa, sem problema Tacio!

Olha, o uso desse operator depende muito do contexto do que vc está fazendo.

Na reposta acima, que nosso amigo Daniel explicou corretamente, caso a "variável" não tenha sido iniciada, o restante do seu código não será executado, correto ?

Mas, utilizando seu próprio exemplo, imagine que não seria isso que vc esteja buscando. Imagine que, a operação padrão por exemplo seja a "Soma". Nesse caso, vc também poderia utilizar o isset para realizar a verificação. Seria algo como:

if (isset($_POST['operacao'])) {
    $op = $_POST['operacao']; 
} else {
    $op = 'Somar' ;
}

ou

$op = (isset($_POST['operacao'])) ? $_POST['operacao'] : 'Somar';

Sendo assim, caso esteja usando o PHP 7, vc pode usar o null coalesce pra obter esse resultado, ficando assim:

$op = $_POST['operacao'] ?? 'Somar';

ou seja, o operador retorna o primeiro valor válido na expressão.

Se não tivessemos o $_POST['operacao'], por exemplo. Imagine que cada operação tivesse sua própria alocação no post. Ficaria assim:

$op = $_POST['somar'] ?? $_POST['subtrair'] ??  $_POST['multiplicar'] ??  $_POST['dividir'] ??  'somar';

Fazendo assim, ele ia tentar achar todos esses valores e caso não achasse nenhum, retornaria a string 'somar'.

Bom, esse foi só um exemplo bem simples mesmo, pra abrir possibilidades rsrs

Espero ter ajudado. Abraço!

A dica é boa Rafael