Esse programa está correto, sou iniciante em PHP?

Galerinha estou tentando aprender PHP e fiz uma lógica assim, quero saber se estou errado ou certo, tenho dúvidas sobre os resultados Se for possível corrijam e me avisem ;D

Faça um programa que receba 3 números.

a) Informe qual é o maior e o menor dos três.
b) Se o resultado da soma dos três (maior e menor) for maior que 100 o programa deverá apresentar seu resultado multiplicando o maior com o menor.
c) IF/ELSE


<!DOCTYPE html>
<html>
<head>
<title>Exercício</title>
  <meta charset="UTF-8">
    <meta name="description" content="">
  <meta name="keywords" content="">
  <meta name="author" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<form metod="get" name="form">
<p>
<label for="N1">Primeiro Número</label>
<input type="number" id="N1" name="N1" required />
</p>
 
<p>
<label for="N2">Segundo Número</label>
<input type="number" id="N2" name="N2" required />
</p>
 
<p>
<label for="N3">Terceiro Número</label>
<input type="number" id="N3" name="N3" required />
</p>
<button type="submit">Verificar</button>
</form>
<?php
if(isset($_GET['N1'])){
$n1 = $_GET['N1'];
$n2 = $_GET['N2'];
$n3 = $_GET['N3'];
$maior = 100;
$menor = 100;
$meio = 100;
 
if($n1>=$n2 && $n1>=$n3){
$maior = $n1;
if($n2<=$n3){
$menor = $n2;
$meio = $n3;
} 
else {
$menor = $n3;
$meio = $n2;
}
}
 
if($n2>=$n1 && $n2>=$n3){
$maior = $n2;
if($n1<=$n3){
$menor = $n1;
$meio = $n3;
} 
else {
$menor = $n3;
$meio = $n1;
}
}
 
if($n3>=$n1 && $n3>=$n2){
$maior = $n3;
if($n2<=$n1){
$menor = $n2;
$meio = $n1;
} 
else {
$menor = $n1;
$meio = $n2;
}
}

$resultado1 = "O menor valor é"; 
$resultado2 = "O maior valor é";
$resultado = $maior * $menor * $meio;

echo $maior." ".$meio." ".$menor;
echo "<br />";
echo "O valor final é " .$resultado;
}
?>

</body>
</html>

Recomendo você a separar a parte lógica (PHP) da parte de “visualização” (HTML), pois caso algum erro venha a ocorrer, fica mais simples de procurar a causa exata do problema. Outra dica, se atente a indentação, facilita a leitura do seu código.

Aqui vai, criei um arquivo template.php para separar a parte da apresentação:

<!DOCTYPE html>
<html>
  <head>
    <title>Exercício</title>
    <meta charset="UTF-8">
    <meta name="description" content="">
    <meta name="keywords" content="">
    <meta name="author" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <style>
      label {
        display: block;
        margin: 5px;
      }
    </style>

  </head>
  <body>
    <form metod="get" name="form">
      <label>
        Primeiro Número <input type="number" name="N1" required/>
      </label>

      <label>
        Segundo Número <input type="number" name="N2" required/>
      </label>
  
      <label>
        Terceiro Número <input type="number" name="N3" required/>
      </label>  
      
      <input type="submit" value="Verificar"/>
    </form>

    <p>Maior: <?php echo (isset($maior)) ? $maior : "" ?></p>
    <p>Menor: <?php echo (isset($menor)) ? $menor : "" ?></p>
    <p>Resultado: <?php echo (isset($result)) ? $result : "" ?></p>
  </body>
</html>

Você vai notar que fiz algumas pequenas modificações, mas no geral, a parte do seu código HTML está ok.

Aqui vai o arquivo principal que implementará a lógica do programa, esta é a página que você irá escrever na URL, por exemplo, localhost/diretorio/x/este_arquivo.php:

<?php 

if(count($_GET) > 0) {
  $numbers = [];
  if(isset($_GET['N1'])) {
    $numbers[] = $_GET['N1'];
  }

  if(isset($_GET['N2'])) {
    $numbers[] = $_GET['N2'];
  }

  if(isset($_GET['N3'])) {
    $numbers[] = $_GET['N3'];
  }

  # define o maior e o menor valor
  if($numbers[0] > $numbers[1]) {
    $maior = $numbers[0];
    $menor = $numbers[1];
  } else {
    $maior = $numbers[1];
    $menor = $numbers[0];
  }

  if($maior > $numbers[2]) {
    if($menor > $numbers[2]) {
      $menor = $numbers[2];
    }
  } else {
    $maior = $numbers[2];
  }

  # condição p/ a multiplicação
  if($maior+$menor > 100) {
    $result = $maior*$menor;
  }

}

require "template.php";

?>

Por fim, aconselho você a testar a execução do seu programa pra saber se está certo ou errado, pois assim você pode comparar entre a saída atual e a desejada; com entradas: 56 34 10, após a execução do seu código a saída é 19040, com as informações que você disponibilizou na pergunta, suponho que a saída desejada seria 56*10 = 560.

1 curtida

Meu código estava errado?

1 curtida

Sim, ali com as entradas aleatórias que eu dei como exemplo (56, 34, 10), na verdade nem entraria na condição pra ser feita a multiplicação, já q a condição é que 56 + 10 seja maior que 100.

O exercício, caso a condição da multiplicação retorne falso, só pede pela exibição do maior e do menor valor; caso não tenha ficado claro execute o meu código e o seu, coloque entradas iguais e compare as saídas.

1 curtida

Estou com algumas dúvidas é possível fazer um único if e else? Porque você utiliza array ? É possível declarar dentro do array os valores [ $_GET[‘N1’], $_GET[‘N2’], $_GET['N3];]?

1 curtida

1. Estou com algumas dúvidas é possível fazer um único if e else ? Porque você utiliza array ?
R: Bem, testei usando o while e a resposta é sim. Sobre eu utilizar array, aqui usei por escolha minha mesmo, porém uma array é uma única variável e declarar uma única variável é melhor que declarar muitas, deve influenciar na performance talvez, mas isso é só uma suposição minha.

$i  = 0;
 
# seleciona um valor aleatório da array de valores
$maior = $numbers[array_rand($numbers)];
$menor = $numbers[array_rand($numbers)];

# seleciona o maior e o menor valor
while($i < count($numbers)) {
  if($numbers[$i] > $maior) {
    $maior = $numbers[$i];
  } elseif($numbers[$i] < $menor) {
    $menor = $numbers[$i];
  }
  $i ++;
}

2. É possível declarar dentro do array os valores [ $_GET[‘N1’], $_GET[‘N2’], $_GET['N3];] ?
R: Sim.

# diz para o php que a variável $numbers é do tipo array
$numbers = [];

# armazena os valores $_GET['N1'], $_GET['N2'] e $_GET['N3'] dentro da array $numbers
$numbers[] = $_GET['N1'];
$numbers[] = $_GET['N2'];
$numbers[] = $_GET['N3'];

Outro modo de armazenar esses valores dentro de uma array seria esse:

$numbers = array($_GET['N1'], $_GET['N2'], $_GET['N3']);
1 curtida

Obrigado por todas essas informações, eu tenho outras dúvidas agora e gostaria de incluir uma nova visão sobre sua solução e a minha solução…:grinning:

É possível fazer algo

   
      $numbers[array_rand($maior, $menor, $aleatorio)]; // aleatorio: * maior ou  menor

?