Jump to content
joaovictorv

Somar valores dentro de um foreach

Recommended Posts

Estava querendo somar os valores dentro de um foreach,  mais ele sempre retorna pra mim os valores separados por espaço, exemplo: 20 30 40 50

gostaria de pegar todos esses valores e somar para dar o valor final 

 

segue o codigo:

<?php 
if(isset($_SESSION['carrinho'])):
$item_carrinho = '0';
if(count($_SESSION['carrinho']) > '0'):
    foreach($_SESSION['carrinho'] as $id_produto_carrinho => $quantidade_produto_carrinho):
        $item_carrinho++;

    	$database = open_database();

    $sql = "SELECT nome, preco_varejo, preco_atacado FROM produto WHERE id ='$id_produto_carrinho'";
    $resultados = mysqli_query($database,$sql);
    $res=mysqli_fetch_array($resultados);

    if (@mysqli_num_rows($resultados) > 0){
        foreach($resultados as $read_produto_carrinho_view);
        $valor_total_produto_carrinho = $quantidade_produto_carrinho * $read_produto_carrinho_view['preco_varejo'];
        $valor_subtotal_venda = '0';
        $valor_subtotal_venda += $read_produto_carrinho_view['preco_varejo'];       
        echo $valor_subtotal_venda;
       
    }
?>

 

Edited by Gabriel Heming
corrigir formatação do código.

Share this post


Link to post
Share on other sites
8 horas atrás, joaovictorv disse:

foreach($resultados as $read_produto_carrinho_view);

 

1 - Se você coloca o ";" (ponto e vírgula) após o foreach, significa que ele fará o looping sem processar as linhas seguintes.

Exemplo:

<?php
foreach( range( 1, 5 ) as $teste );//note o ";"
echo 1;
    
echo "\n";//apenas uma quebra de linha
    
foreach( range( 1, 5 ) as $teste )
    echo 2;

Resultado:

1
22222

Em ambas as vezes ele fez a volta 5 vezes, mas apenas na segunda ele executou o echo em todas as voltas. Sacou?

 

 

2 - Isso aqui:

$valor_subtotal_venda = '0';

Jamais deveria estar imediatamente antes da soma ("+="), pois significa que você sempre estará somando o valor à 0.

Isso deve estar antes do foreach apenas para definir a variável com 0 como valor inicial.

Share this post


Link to post
Share on other sites

Na realidade, esse código, assim como está, deveria estar dando erro de sintaxe. Tem abertura de if e foreach sem fechamento (abertura por dois pontos ":").

 

https://secure.php.net/manual/en/control-structures.alternative-syntax.php 

Share this post


Link to post
Share on other sites
Em 20/03/2018 at 08:05, Matheus Tavares disse:

 

1 - Se você coloca o ";" (ponto e vírgula) após o foreach, significa que ele fará o looping sem processar as linhas seguintes.

Exemplo:


<?php
foreach( range( 1, 5 ) as $teste );//note o ";"
echo 1;
    
echo "\n";//apenas uma quebra de linha
    
foreach( range( 1, 5 ) as $teste )
    echo 2;

Resultado:


1
22222

Em ambas as vezes ele fez a volta 5 vezes, mas apenas na segunda ele executou o echo em todas as voltas. Sacou?

 

 

2 - Isso aqui:


$valor_subtotal_venda = '0';

Jamais deveria estar imediatamente antes da soma ("+="), pois significa que você sempre estará somando o valor à 0.

Isso deve estar antes do foreach apenas para definir a variável com 0 como valor inicial.

 

com certeza, estava somando sempre o valor a zero, essa variável fora do foreach e resolveu o problema simples...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Giuliano Maffei
      Oi Pessoal, sou novo por aqui.
      Agradeço se alguém puder me ajudar.
      Tenho um banco de dados com a tabela abaixo:
      DB pets
      ------------------------------------------------------------------------------------
      | id | pet_tutor | pet_name | pet_species | pet_breed  |
      ------------------------------------------------------------------------------------
      | 1  |        José |             Rex |                   1 |    Vira-latas |
      | 2  |      Paulo |      Bichano |                  2 |        Siamês |
      | 3  |       João |             Max |                  1 | Lhasa-apso |
      ------------------------------------------------------------------------------------
       
      Fiz o código abaixo:
      $species_lang = array('0' => 'Selecionar','1' => 'Cachorro', '2' => 'Gatos', '3' => 'Acarás');
       
      SELECT (pets.id as id, pet_tutor, pet_name, {(" . $species_lang['pet_species'] . ")}, pet_breed FROM pets)
       
      Resultado:
      -----------------------------------------------------------------------------------
      | id | pet_tutor | pet_name | pet_species | pet_breed  |
      ------------------------------------------------------------------------------------
      | 1  |        José |             Rex |                        | Vira-latas |
      | 2  |       Paulo |    Bichano |                        |     Siamês |
      | 3  |        João |           Max |                        | Lhasa-apso |

      -----------------------------------------------------------------------------------
      Porque não consigo carregar o campo 'pet_species' com a raça do pet. Alguém tem uma luz pra me ajudar?
       
      Obrigado
    • By AlexandrePrezzi
      Por favor se alguem puder me tira essa dúvida 
       
      Por exemplo tenho 2 arrays de mesmo tamanho e gostaria somar os valores  (mesmo indice )  e colocar em um terceiro array
       
      Exemplo
      <?php $array1 = array(1, 2, 3, 4, 5, 6); $array2 = array(7, 8, 9, 10, 11, 12); ou seja .. o resultado seria um novo array $array3(1+7; 2+8, 3+9,...) e assim por diante ......
       
      Qual seria a forma correta de fazer isso ?
       
      Os dois primeiros arrays ja tenho... me falta criar o terceiro com o resultado desejado....
       
      Obrigado
    • By lezão
      Boa tarde, pessoal!
      tenho um codigo que peguei de uma video aula, na video aula funciona normal, mas comigo naun esta funcionando!
      os codigos estaun identicos e em meu server naun roda.
      alguem pode me ajudar?
       
      veja o codigo index.php
      <!DOCTYPE html> <html lang="pt-br"> <head> <meta charset="UTF-8"> <title>Carrinho de Compras</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" /> </head> <body> <div class="container"> <div class="row"> <?php $pdoConnection = require("conexao.php"); $sql = mysqli_query($link, "SELECT * FROM tab_pedido"); //$qr = mysql_query($sql) or die (mysql_error()); while($line = mysqli_fetch_array($sql)){ $Nome_produto = $line['Nome_produto']; $Valor_produto = $line['Valor_produto']; $Descricao_produto = $line['Descricao_produto']; $Foto_produto = $line['Foto_produto']; $id_produtos = $line['id_produtos']; ?> <div class="col-4"> <div class="card"> <div class="card-body"> <h4 class="card-title"><?php echo $Nome_produto;?></h4> <h4 class="card-title"><img src="<?php echo $Foto_produto; ?>" style="border-radius: 10px;" width="75px" height="75px" /></h4> <h6 class="card-subtitle mb-2 text-muted"> R$<?php echo number_format($Valor_produto, 2, ',', '.')?> </h6> <a class="btn btn-primary" href="teste_carrinho.php?acao=add&id=<?php echo $id_produtos;?>" class="card-link">Comprar</a> </div> </div><br/> </div> <?php } ?> </div> </div> </body> </html> codigo carrinho.php
      <?php session_start(); if(!isset($_SESSION['carrinho'])){ $_SESSION['carrinho'] = array(); } //ADICIONA PRODUTOS if(isset($_GET['acao'])){ //ADICIONAR CARRINHO if($_GET['acao'] == 'add'){ $id = intval($_GET['id_produtos']); if(!isset($_SESSION['carrinho'][$id])){ $_SESSION['carrinho'][$id] = 1; } else { $_SESSION[‘carrinho’][$id] += 1; } } //REMOVER CARRINHO if($_GET['acao'] == 'del'){ $id_produtos = intval($_GET['id_produtos']); if(isset($_SESSION['carrinho'][$id_produtos])){ unset($_SESSION['carrinho'][$id_produtos]); } } //ALTERAR QUANTIDADE if($_GET['acao'] == 'up'){ if(is_array($_POST['prod'])){ foreach($_POST['prod'] as $id_produtos => $qtd){ $id_produtos = intval($id_produtos); $qtd = intval($qtd); if(!empty($qtd) || $qtd <> 0){ $_SESSION['carrinho'][$id_produtos] = $qtd; }else{ unset($_SESSION['carrinho'][$id_produtos]); } } } } } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" /> </head> <body> <div class="container"> <div class="card mt-5"> <div class="card-body"> <h4 class="card-title">Carrinho</h4> <a href="teste_index.php">Lista de Produtos</a> </div> </div> <form action="?acao=up" method="post"> <table class="table table-strip"> <thead> <tr> <th>Produto</th> <th>Quantidade</th> <th>Preço</th> <th>Subtotal</th> <th>Ação</th> </tr> </thead> <tbody> <?php if(count($_SESSION['carrinho']) == 0){ echo'<tr> <td colspan="5">Não há produto no carrinho</td> </tr>'; } else { include "conexao.php"; $total = 0; foreach($_SESSION['carrinho'] as $id_produtos => $qtd){ $sql = "SELECT * FROM tab_pedido WHERE id_produtos = '$id_produtos'"; $qr = mysql_query($sql) or die (mysql_error()); $ln = mysql_fetch_assoc($qr); $Nome_produto = $ln['Nome_produto']; $Valor_produto = number_format($ln['Valor_produto'], 2, ',', '.'); $sub = number_format($ln['Valor_produto'] * $qtd, 2, ',', '.'); $total += $ln['Valor_produto'] * $qtd; echo ' <tr> <td>'.$Nome_produto.'</td> <td><input type="text" size="3" name="prod['.$id_produtos.']" value="'.$qtd.'" /></td> <td>R$ '.$Valor_produto.' </td> <td>R$ '.$sub.'</td> <td><a href="?acao=del&id_produtos='.$id_produtos.'">Remove</a></td> </tr>'; } $total = number_format($total, 2, ',','.'); echo '<tr> <td colspan="4">Total</td> <td>R$ '.$total.'</td> </tr>'; } ?> </tbody> </form> </table> </body> </html> aonde eu estou errando????
    • By Diego-SLP
      Bom dia,
       
      Estou fazendo uma tela de relatorios de registro de ponto e não estou conseguindo totalizar as horas conforme trago do banco de dados, se alguem puder me ajudar.
       
      SELECT p.cod_obra,f.nome,o.obra, TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(p.totalhora))),'%H:%i') AS hora, TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(p.totalhoraextra))),'%H:%i') AS horaextra, f.funcao FROM rh_pontoFuncionario p, rh_funcionario f, rh_obra o WHERE p.data BETWEEN '2020/10/01' AND '2020/11/20' AND p.cod_obra = '20056' AND p.cod_func = f.cod AND p.cod_obra = o.cod GROUP BY p.cod_obra, f.nome Essa query me traz COD_OBRA,NOME,OBRA,HORA,HORAEXTRA,FUNCAO e eu gostaria de TOTALIZAR o campo HORA e HORAEXTRA somando todas as linhas mas não consigo
    • By clovis.sardinha
      Estou tentando mandar e-mail para vários usuários, mas só vai para o primeiro, quando tento colocar para vários dá erro. Alguém pode sugerir como fazer?
       
      if ($this->form_validation->run() == true) {             $this->load->model('emailReplayModel');             $user=$this->emailReplayModel->emailreplay(); //$user tem os dados dos usuários que quero mandar -veja abaixo                                  foreach ($user as &$i){                                  $this->email->from("atendimento@portaldapermuta.com", 'Portal da Permuta');             $this->email->subject("Continue seu cadastramento no Portal - é facil");             $email=$i['email'];             $this->email->to($email);             $msg=$this->load->view('usuario/emailReplayFinal',array($senha,'senha' =>$i['senha'],$nome,'nome'=>$i['nome_interessado']),TRUE);             $this->email->message($msg);             $this->email->send();                                         }             $this->email->send();                      if($this->email->send())    {                                      $this->session->set_flashdata('success', 'Mensagens enviadas.');                 redirect('admin/painel/painel_adm');             }  
      debug do $user:
      [user] => Array ( [0] => Array ( [id_interessado] => 23595 [nome_interessado] => CLOVIS [senha] => xxxx [email] => clovis.sardinha@teste2.com [data_inscricao] => 2020-10-12 14:35:43 ) [1] => Array ( [id_interessado] => 23596 [nome_interessado] => ANDRADE [senha] => xxxxx [email] => clovis.sardinha@teste3.com [data_inscricao] => 2020-10-12 16:22:27 ) )  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.