Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcoscouto

Dúvida em input junto com laço de repetição

Recommended Posts

Galera, sou iniciante em php e estou com uma dúvida referente a input junto com laço de repetição. Estou tentando resolver um exercício básico, que consiste em o usuário digitar quantos números quiser até digitar 0 que para o laço de repetição. O programa pega esses número digitados antes de 0 e tira a média deles. Já fiz várias vezes em Pascal e Java esse tipo de exercício, mas a relação do html e o php na questão de form, get e post parece um pouco mais complexo para esse tipo de operação. Já tentei pesquisar em alguns lugares e sempre encontro somente com limitação de inserções, por exemplo, o usuário digitando 2 números que em tese seria fazer 2 forms, captar o valor deles e dividir por 2. Mas quando trata-se de vários números não sei como proceder. Alguém pode me dar um caminho?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez você criaria um form com dois inputs e um botão. Você poderia, por exemplo, colocar um título: "Preencha os inputs com algum número". Nos inputs algo como:

<input type="number" name="numbers[]" min="0" value="0" />

* Input number: Leia mais em https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/number

 

E ao submeter o form com um botão (ex.: enviar), trataria os valores com o PHP e exibiria os resultados na página.
Por exemplo:

 

<?php

if(isset($_POST['numbers']) and count($_POST['numbers'])) {
  $Numbers = $_POST['numbers'];
  $Total   = 0;
  foreach($Numbers as $Number) {
    $Total += (int) $Number;
  }
  $Sum = $Total / count($Numbers);
}
?>

<h3>Média: <?php echo $Sum; ?></h3>

 

 

Creio que poderia fazer algo como isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom primeiramente, obrigado @Tadeu Barbosa! Eu dei uma lida sobre input no link que você passou, mas a grande dificuldade mesmo é armazenar esses números antes de executar o php, porque o usuário teria que ir digitando até quando quisesse parar digitando 0, aí o formulário teria que interagir com um "while" ou um "do while" para armazenar os valores ou em variável ou em vetor como você sugeriu para depois ser processado na segunda parte do código, então o armazenamento desses números que está mais complicado. Mas achei interessante a questão de resolver em JavaScript, existe alguma forma mais fácil de fazer com JavaScript este exercício?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu comentei sobre JavaScript e não conclui a ideia, fui para outro lado.

 

 

Não sei se poderia usar JS, sendo que se trata de PHP, mas poderia usar o prompt:

 

var Value   = null,
    Numbers = [];

while(Value!==0) {
  Value = prompt("Digite um número qualquer maior que 1. Para concluir digite 0:");
  Value = parseInt(Value);
  if(Value>0) {
  	Numbers.push(Value);
  }
}

alert(Numbers);

Funcionando...

 

E dessa variável `Numbers` você enviaria para o PHP fazer o cálculo. Maaaaas acho que isso seria uma grande gambiarra (kk), você estaria usando JS, como já disse anteriormente. Uma outra ideia seria, também, ir adicionando inputs pelo javascript dentro do form e depois submeter para o PHP.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade é peguei uns exercícios de Lógica de programação de uma lista feita para Pascal e tentei trazer pro PHP hehehe, porém vi que somente em PHP é um pouco mais complexo essa inserção de dados contínuo pelo usuário, mas combinado com outras tecnologias como o JS é totalmente possível, então as dicas foram totalmente válidas para a resolução do exercício. Tanto é complicado fazer em PHP que após isso comecei a pesquisar sobre lista de exercícios em PHP e realmente sempre tem uma limitação de quantidade de inserção de dados nos enunciados. Vou continuar os estudos do PHP e partir pra JS e outros tecnologias para desenvolvimento web. Obrigado @Tadeu Barbosa! Logo mais posto a solução completa para deixar registrado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao final foi muito mais fácil somente resolver somente em JS. Aos que venham ter a mesma dúvida acredito que o JS é bem mais adequado para a resolução deste exercício em questão. Segue o código para se alguém tiver a mesma dúvida.

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Exercicio 5</title>
</head>

<body>
5 - Faça um programa que leia um número indeterminado de idades. A última idade lida, que não entrará nos cálculos, deverá ser igual a zero. Ao final programa deverá escrever quantas idades foram lidas, calcular e escrever a média de idade desse grupo de idades.<br /><br />
<script type="application/javascript">

var valor = null,
    idades = [];
	soma = null;
	

while(valor!==0) {
  valor = prompt("Digite uma idade qualquer maior ou igual a 1 e para concluir digite 0:");
  valor = parseInt(valor);
  if(valor	>0) {
  	idades.push(valor);
  }
}

for(i = 0; i < idades.length; i++) { 
	
	soma += idades[i];
	}
	
alert("Foram digitadas "+idades.length+" idades e a soma das idades é " + soma + " e a média é " + (soma/idades.length).toFixed(2));
</script>

</body>
</html>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.