Ir para conteúdo

POWERED BY:

Arquivado

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

wneo

Como Somar em forEach e explode

Recommended Posts

Olá!

Pessoal, preciso somar os valores vindos da tabela...

Por exemplo,

*Tenho 2 tabelas:

-Produtos e budget;

-Ao criar um budget, escolho os produtos e salvo o id de cada um separado por virgula em um campo da budget;

 

1-Receber os valores em um foreach, pq eles estavam agrupados por vírgula em um campo;

2-Exibir individualmente esses valores ($valor_cobrado);

3-Somar e exibir na tela o total, que é a soma desses valores.

 

O 1 e 2 já estão ok....

<form class="form_budget" id="form_update_budget">

<?php	
	
	while($row = mysql_fetch_array($rs_budgets)){
	$id_budget = $row['id_budget'];
	$id_produto = $row['id_produto'];
	$nome_budget = $row['nome_budget'];	

?>
<fieldset>
<legend align="left"><?php echo $nome_budget; ?></legend>

<li>
<label><span>Choosed products</span></label>
<?php

	$prepara_resultado= explode(",", $id_produto);
	
	foreach($prepara_resultado as $newvalue){    
	$sql_produto_escolhido="SELECT * FROM produtos WHERE id_produto='$newvalue'";			
		 
	$prepara_resultado = mysql_query($sql_produto_escolhido);
    $row = mysql_fetch_assoc($prepara_resultado);
	
    $id_produto_escolhido = $row['id_produto_escolhido'];
	$nome_produto_escolhido = $row['nome_produto']; 			 
	$valor_cobrado = $row['valor_cobrado']; 
		
	
?>
<b><?php echo $nome_produto_escolhido; ?>(R$<b class="<?php echo $id_produto_escolhido; ?>_valor_produto"><?php echo $valor_cobrado; ?></b>) </b> - 
		
<?php
}//end foreach explode

?>
</li>

<li>
<label><span>Valor total</span></label>
<b class="valor_total"></b>
</li>

<button>Abrir</button>

</fieldset>
<?php
}//end while budgets

?>
</form>

....Alguém consegue chegar no 3?????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resumindo... você quer somar todos os valor_cobrado que entram no foreach?

 

<?php

    $valor_total = 0;

	foreach($prepara_resultado as $newvalue){    
	    $sql_produto_escolhido="SELECT * FROM produtos WHERE id_produto='$newvalue'";			
	    $prepara_resultado = mysql_query($sql_produto_escolhido);
        $row = mysql_fetch_assoc($prepara_resultado);
        $id_produto_escolhido = $row['id_produto_escolhido'];
	    $nome_produto_escolhido = $row['nome_produto']; 			 
	    $valor_cobrado = $row['valor_cobrado']; 
	    $valor_total = $valor_total+$valor_cobrado;
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não da para saber exatamente a sua estrutura mas eu prefiro e recomendo sempre realizar somas direto na query do mysql.
além de deixar mais rapido o código você economiza algumas linhas de comando

 

Sugestões de calculo direto na query

SELECT sum(valor) as valor
SELECT sum(if(produto='caixa',valor,null)) as valor

No primeiro somo todos os valores da coluna valor

No segundo somo todos os valores da coluna valor se na coluna produto for igual a caixa.

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, Maykel-ctba disse:

Resumindo... você quer somar todos os valor_cobrado que entram no foreach?

 


<?php

    $valor_total = 0;

	foreach($prepara_resultado as $newvalue){    
	    $sql_produto_escolhido="SELECT * FROM produtos WHERE id_produto='$newvalue'";			
	    $prepara_resultado = mysql_query($sql_produto_escolhido);
        $row = mysql_fetch_assoc($prepara_resultado);
        $id_produto_escolhido = $row['id_produto_escolhido'];
	    $nome_produto_escolhido = $row['nome_produto']; 			 
	    $valor_cobrado = $row['valor_cobrado']; 
	    $valor_total = $valor_total+$valor_cobrado;
?>

Assim o total mostra 0...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
8 horas atrás, Guilherme Luiz disse:

Não da para saber exatamente a sua estrutura mas eu prefiro e recomendo sempre realizar somas direto na query do mysql.
além de deixar mais rapido o código você economiza algumas linhas de comando

 

Sugestões de calculo direto na query


SELECT sum(valor) as valor
SELECT sum(if(produto='caixa',valor,null)) as valor

No primeiro somo todos os valores da coluna valor

No segundo somo todos os valores da coluna valor se na coluna produto for igual a caixa.

tentei adicionar assim:

<!-- .................................................................. -->

<form class="form_budget" id="form_update_budget">

<?php	
	
	while($row = mysql_fetch_array($rs_budgets)){
	$id_budget = $row['id_budget'];
	$id_produto = $row['id_produto'];
	$nome_budget = $row['nome_budget'];	

?>
<fieldset>
<legend align="left"><?php echo $nome_budget; ?></legend>

<li>
<label><span>Choosed products</span></label>
<?php

	$prepara_resultado= explode(",", $id_produto);
	
	foreach($prepara_resultado as $newvalue){    
	$sql_produto_escolhido="SELECT * FROM produtos WHERE id_produto='$newvalue'";			
		 
	$prepara_resultado = mysql_query($sql_produto_escolhido);
    $row = mysql_fetch_assoc($prepara_resultado);
	
    $id_produto_escolhido = $row['id_produto_escolhido'];
	$nome_produto_escolhido = $row['nome_produto']; 			 
	$valor_cobrado = $row['valor_cobrado']; 
		
?>
<b><?php echo $nome_produto_escolhido; ?>(R$<b class="<?php echo $id_produto_escolhido; ?>_valor_produto"><?php echo $valor_cobrado; ?></b>) </b> - 
		
<?php
}//end foreach explode

$valorTotal = 0;
foreach($passa as $valor){
  	$sql_produto_escolhido="SELECT * FROM produtos WHERE id_produto='$newvalue'";			
		 
	$prepara_resultado = mysql_query($sql_produto_escolhido);
    $row = mysql_fetch_assoc($prepara_resultado);

	$id_produto_escolhido = $row['id_produto_escolhido'];
	$nome_produto_escolhido = $row['nome_produto']; 			 
	$valor_cobrado = $row['valor_cobrado']; 
	
	$soma_valor_cobrado = "SELECT sum(valor_cobrado) FROM produtos";
	$rs_soma_valor_cobrado = mysql_query($soma_valor_cobrado);
	$row2 = mysql_fetch_assoc($rs_soma_valor_cobrado);
	$valor_cobrado_final = $row2['valor_cobrado']; 
	echo 'Valor total '.$rs_soma_valor_cobrado;

}	
?>
</li>

<li>
<label><span>Valor total</span></label>
<b class="valor_total"></b>
</li>

<button>Abrir</button>

</fieldset>
<?php
}//end while budgets



?>
</form>

</div><!-- /budget_box-->
<!-- ......................... /budget box ......................... -->

Mas não mostra nada...:pensive:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, então o $valor_cobrado não é um float/int (ou seja, não é um número válido para somas), ou ele vem como zero mesmo.

 

Fiz um exemplo super curto de somas em laço (for, foreach, while)

<?php

	$arrayValores = array(135.80, 112.30, 1.99);
	$valorTotal = 0;

	for ($i = 0; $i < count($arrayValores); $i++ ){
		$valorTotal += $arrayValores[$i];
	}

	echo $valorTotal;

// * Imprimirá "250.09"

Veja se te ajuda em algo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Maykel-ctba disse:

Cara, então o $valor_cobrado não é um float/int (ou seja, não é um número válido para somas), ou ele vem como zero mesmo.

 

Fiz um exemplo super curto de somas em laço (for, foreach, while)


<?php

	$arrayValores = array(135.80, 112.30, 1.99);
	$valorTotal = 0;

	for ($i = 0; $i < count($arrayValores); $i++ ){
		$valorTotal += $arrayValores[$i];
	}

	echo $valorTotal;

// * Imprimirá "250.09"

Veja se te ajuda em algo.

Tentei assim:

<!-- .................................................................. -->

<form class="form_budget" id="form_update_budget">

<?php	
	
	while($row = mysql_fetch_array($rs_budgets)){
	$id_budget = $row['id_budget'];
	$id_produto = $row['id_produto'];
	$nome_budget = $row['nome_budget'];	

?>
<fieldset>
<legend align="left"><?php echo $nome_budget; ?></legend>

<li>
<label><span>Choosed products</span></label>
<?php

	$prepara_resultado= explode(",", $id_produto);
	
	foreach($prepara_resultado as $newvalue){    
	$sql_produto_escolhido="SELECT * FROM produtos WHERE id_produto='$newvalue'";			
		 
	$prepara_resultado = mysql_query($sql_produto_escolhido);
    $row = mysql_fetch_assoc($prepara_resultado);
	
    $id_produto_escolhido = $row['id_produto_escolhido'];
	$nome_produto_escolhido = $row['nome_produto']; 			 
	$valor_cobrado = $row['valor_cobrado']; 
	
	$arrayValores = array($valor_cobrado);
	$valorTotal = 0;

	for ($i = 0; $i < count($arrayValores); $i++ ){
		$valorTotal += $arrayValores[$i];
	}

	echo $valorTotal;
		
?>
<b><?php echo $nome_produto_escolhido; ?>(R$<b class="<?php echo $id_produto_escolhido; ?>_valor_produto"><?php echo $valor_cobrado; ?></b>) </b> - 
	
<?php
}//end foreach produtos
?>
</li>

<li>
<label><span>Valor total</span></label>
<b class="valor_total"></b>
</li>

<button>Abrir</button>

</fieldset>
<?php
}//end while budgets

?>
</form>

</div><!-- /budget_box-->
<!-- ......................... /budget box ......................... -->

Mas apenas repete os valores originais, sem somar um com o outro...

Por exemplo, Produto1 - R$100 e Produto2 R$50, usando o código acima tenho como resultado isso: 10050...:pensive:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro, certifique-se que seus valores são válidos.

R$100,00 é diferente de 100.00 (este sim, é válido para somas).

 

Pelo que parece, ele está concatenando variáveis, significa que não são valores inteiros para serem somados.

 

Depois, veja que você está criando o array dentro do foreach. Crie ele fora, e apenas adicione os índices dentro do foreach.

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Maykel-ctba disse:

Primeiro, certifique-se que seus valores são válidos.

R$100,00 é diferente de 100.00 (este sim, é válido para somas).

 

Pelo que parece, ele está concatenando variáveis, significa que não são valores inteiros para serem somados.

 

Depois, veja que você está criando o array dentro do foreach. Crie ele fora, e apenas adicione os índices dentro do foreach.

Estou usando int.. no bd está 100 e 50..

Coloquei fora do foreach:

<!-- .................................................................. -->

<form class="form_budget" id="form_update_budget">

<?php	
	
	while($row = mysql_fetch_array($rs_budgets)){
	$id_budget = $row['id_budget'];
	$id_produto = $row['id_produto'];
	$nome_budget = $row['nome_budget'];	

?>
<fieldset>
<legend align="left"><?php echo $nome_budget; ?></legend>

<li>
<label><span>Choosed products</span></label>
<?php

	$prepara_resultado= explode(",", $id_produto);
	
	foreach($prepara_resultado as $newvalue){    
	$sql_produto_escolhido="SELECT * FROM produtos WHERE id_produto='$newvalue'";			
		 
	$prepara_resultado = mysql_query($sql_produto_escolhido);
    $row = mysql_fetch_assoc($prepara_resultado);
	
    $id_produto_escolhido = $row['id_produto_escolhido'];
	$nome_produto_escolhido = $row['nome_produto']; 			 
	$valor_cobrado = $row['valor_cobrado']; 
		
		
?>
<b><?php echo $nome_produto_escolhido; ?>(R$<b class="<?php echo $id_produto_escolhido; ?>_valor_produto"><?php echo $valor_cobrado; ?></b>) </b> - 
	
<?php
}//end foreach produtos

$arrayValores = array($valor_cobrado);
	$valorTotal = 0;

	for ($i = 0; $i < count($arrayValores); $i++ ){
		$valorTotal += $arrayValores[$i];
	}

	echo $valorTotal;
?>
</li>

<li>
<label><span>Valor total</span></label>
<b class="valor_total"></b>
</li>

<button>Abrir</button>

</fieldset>
<?php
}//end while budgets

?>
</form>

Como coloquei, aparece somente o ultimo registro.. por exemplo, se tenho 100 e 50,

mostra somente 50...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente assim:

 

<form class="form_budget" id="form_update_budget">
	<?php	
		
		while($row = mysql_fetch_array($rs_budgets)){

			echo "
			<fieldset>
				<legend align=\"left\">".$row['nome_budget']."</legend>
				<li>
					<label><span>Choosed products</span></label>";

				$prepara_resultado= explode(",", $row['id_produto']);
				$valorTotal = 0;
				
				foreach ($prepara_resultado as $newvalue){  

					$sql_produto_escolhido = "SELECT * FROM produtos WHERE id_produto='$newvalue'";			
					$prepara_resultado = mysql_query($sql_produto_escolhido);
				    $row = mysql_fetch_assoc($prepara_resultado);
					$valorTotal += $row['valor_cobrado'];

					echo "<b>".$row['nome_produto']."(R$<b class=\"".$row['id_produto_escolhido']."_valor_produto\">".$row['valor_cobrado']."</b>) </b> - ";
				}

				echo "
				</li>
				<li>
					<label><span>Valor total</span></label>
					<b class=\"valor_total\">R$".$valorTotal."</b>
				</li>
				<button>Abrir</button>
			</fieldset>";
		}
	?>
</form>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, Maykel-ctba disse:

Tente assim:

 


<form class="form_budget" id="form_update_budget">
	<?php	
		
		while($row = mysql_fetch_array($rs_budgets)){

			echo "
			<fieldset>
				<legend align=\"left\">".$row['nome_budget']."</legend>
				<li>
					<label><span>Choosed products</span></label>";

				$prepara_resultado= explode(",", $row['id_produto']);
				$valorTotal = 0;
				
				foreach ($prepara_resultado as $newvalue){  

					$sql_produto_escolhido = "SELECT * FROM produtos WHERE id_produto='$newvalue'";			
					$prepara_resultado = mysql_query($sql_produto_escolhido);
				    $row = mysql_fetch_assoc($prepara_resultado);
					$valorTotal += $row['valor_cobrado'];

					echo "<b>".$row['nome_produto']."(R$<b class=\"".$row['id_produto_escolhido']."_valor_produto\">".$row['valor_cobrado']."</b>) </b> - ";
				}

				echo "
				</li>
				<li>
					<label><span>Valor total</span></label>
					<b class=\"valor_total\">R$".$valorTotal."</b>
				</li>
				<button>Abrir</button>
			</fieldset>";
		}
	?>
</form>

 

Sem palavras... deu certo!!!=D:rank_03:

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 ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • 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
       
       
       
       
×

Informação importante

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