Ir para conteúdo

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 landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
×

Informação importante

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