Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?????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.>
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...>
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...
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.
>
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...
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.
>
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...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>>
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!!!=DShow de bola ;-)
Resumindo... você quer somar todos os valor_cobrado que entram no foreach?