← Desenvolvimento

Erro_com_calculadora_usando_function

Lida 958 vezes

Offline

Gardenajj 
Membro
Mensagens 1 Gostos 0
Troféus totais: 15
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 3 Level 2 Level 1 First Post Karma Seventh year Anniversary Sixth year Anniversary

Sempre na hora em que vou chamar o resultado aparece o erro
Eu acho que meu erro está aqui.

$opcao = $_GET['opcao'];
$valor1 = $_GET['valor1'];
$valor2 = $_GET['valor2'];
$total = $_GET['total'];




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Calculadora_function</title>
</head>
<?php


$opcao = $_GET['opcao'];
$valor1 = $_GET['valor1'];
$valor2 = $_GET['valor2'];
$total = $_GET['total'];

function calcular($valor1, $valor2, $opcao){
if ($opcao == "somar"){
$total = $valor1 + $valor2;
echo "$total";
}
elseif($opcao == "subtrair"){
$total = $valor1 - $valor2;
echo "$total";
}
elseif($opcao == "multiplicar"){
$total = $valor1 * $valor2;
echo "$total";
}
elseif($opcao == "dividir"){
$total = $valor1 / $valor2;
echo "$total";
}
else
echo "Operação invalida";
}
echo "<img src='calculadora 1.jpg'>";
calcular($valor1 , $valor2 , $opcao)

?>
<body>
<form action="calculadora.php" method="GET">
<tr>
<td><h4>Calculadora</h4></td>
</tr>
<tr>
<td colspan="2"><hr /></td>
</tr>
<tr>
<td>Valor1
<input type="text" name="valor1" id="valor1" size="5" maxlength="5" />
<td><select name="opcao" id="opcao">
<option>Selecione</option>
<option value="somar">+ somar</option>
<option value="subtrair">- subtrair</option>
<option value="multiplicar">* multiplicar</option>
<option value="dividir">/ dividir</option>
</select>
Valor2
<input type="text" name="valor2" id="valor2" size="5" maxlength="5" />
=
<input type="text" name="total" id="total" value="<?php if(isset($total)){ echo $total; } ?>" size="5" maxlength="10"/></td>
</tr>
<tr>
<td><input type="submit" name="igual" id="igual" value="calcular" /> </td>
</tr>
</table>
</form>


</body>
</html>
Offline

diogoosorio 
Membro
Mensagens 134 Gostos 1
Feedback +1

Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Remove o $_GET['opcao'].

Convém também realizares algum tipo de validação ao input que recebes do utilizador (e isto é regra sempre, sempre, sempre).

O problema nesse trecho de código é que se existe uma das variáveis que não é passada (valor1, valor2 ou opcao), a função é chamada com um número inferior de argumentos do que realmente devia.

Tens duas soluções: uma passa por validar os dados do utilizador (e confirmar que tens os dados que necessitas para realizar a operação, apresentando uma mensagem de erro em caso negativo), ou definires valores por defeito na função.

Atenta também à estrutura de controlo switch. Alternativa:

Código: (php) [Seleccione]
<?php
// Erros
if($_GET){
if(!isset($_GET['valor1']) || !is_numeric($_GET['valor1'])) $erros[] = "O <strong>Valor 1</strong> tem de estar preenchido e ser um valor numérico.<br />";
if(!isset($_GET['valor2']) || !is_numeric($_GET['valor2'])) $erros[] = "O <strong>Valor 2</strong> tem de estar preenchido ser um valor numérico.<br />";
if(!isset($erros)){
$total calcular($_GET['valor1'], $_GET['valor2'], $_GET['opcao']);
if(!$total$erros[] = "Tem de seleccionar uma <strong>Operação</strong>.";
}

$valor1 =  $_GET['valor1'];
$valor2 $_GET['valor2'];
$opcao $_GET['opcao'];
}


function 
calcular($valor1$valor2$opcao){
switch($opcao){
case "somar":
$resultado $valor1 $valor2;
break;

case "subtrair":
$resultado $valor1 $valor2;
break;

case "multiplicar":
$resultado $valor1 $valor2;
break;

case "dividir":
$resultado $valor1 $valor2;
break;

default:
return false;
break;
}

return $resultado;
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
  <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Calculadora</title>
  </head>
  <body>
<?php if(isset($erros)): ?>
<div style="width:500px; margin: 20px auto; padding: 10px; background-color: #FFBABA; color: #D8000C; border: 1px solid #D8000C">
<?php foreach($erros as $erro) echo $erro?>
</div>
<?php endif; ?>
    <form action="calculadora.php" method="get">
      <table>
        <tr>
          <td>
            <h4>
              Calculadora
            </h4>
          </td>
        </tr>
        <tr>
          <td colspan="2">
            <hr>
          </td>
        </tr>
        <tr>
          <td>
            Valor1 <input type="text" name="valor1" id="valor1" value="<?php echo (double) $_GET['valor1']; ?>" size="5"
            maxlength="5">
          </td>
          <td>
            <select name="opcao" id="opcao">
              <option>
                Selecione
              </option>
              <option <?php if($_GET['opcao'] == "somar") echo "selected=\"selected\""?> value="somar">
                + somar
              </option>
              <option <?php if($_GET['opcao'] == "subtrair") echo "selected=\"selected\""?> value="subtrair">
                - subtrair
              </option>
              <option <?php if($_GET['opcao'] == "multiplicar") echo "selected=\"selected\""?> value="multiplicar">
                * multiplicar
              </option>
              <option <?php if($_GET['opcao'] == "dividir") echo "selected=\"selected\""?> value="dividir">
                / dividir
              </option>
            </select> Valor2
<input type="text" name="valor2" value="<?php echo (double) $_GET['valor2']; ?>" id="valor2" size="5" maxlength="5"> =
<input type="text" name="total" id="total" value="<?php if(isset($total)){ echo $total; } ?>" size="5" maxlength="10">
          </td>
        </tr>
        <tr>
          <td>
            <input type="submit" name="igual" id="igual" value="calcular">
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>