Jump to content
gabrielslessa

Soma PDO dentro do foreach php

Recommended Posts

Olá amigos, sou novato no PDO e estou quebrando cabeça para fazer uma consulta e somar os valores da coluna da tabela de itens com um parametro predefinido ('id' e 'pedido_min') onde id é o id do produto e pedido_min está no bd mysql como (ENUM) Y ou N, onde Y quer dizer que esse produto não entra na soma do pedido minimo da compra e N entra na soma do pedido minimo. Estou fazendo isso para que produtos como exemplo de cigarros não entrem na conta do pedido minimo. 

 

Tenho um FOREACH que lista os produtos que estao na SESSION php, dentro ou fora desse FOREACH eu preciso somar os produtos que possuem o parametro Y na coluna 'pedido_min' do bd, para diminuir da soma total  do carrinho de compras e checar se o cliente atingiu o valor minimo de compra (15,00), caso tenha atingido o valor minimo entao libera o botao para fechar o pedido.

 

meu código está abaixo:

 

<div class="card-body">
          
          <?php     
            
            //buscando no bd o valor do pedido minimo
            $config = app('db')->select("SELECT as_configura.* FROM as_configura");
			$config = $config[0];
				
                //montando cart dos produtos sa session
				$cart_box = '<ul class="cart-products-loaded">';
				$total = 0;
				$total_acresc = 0;
				
				foreach ($_SESSION["products"] as $product) : 
				
					$product_name = $product["product_name"]; 
					$product_price = $product["product_price"];
					$product_acresc = $product["product_acresc"];
					$id = $product["id"];
					$product_qty = $product["product_qty"];
					
                    //somando o subtotal de cada item do carrinho
					$subtotal = ($product_price * $product_qty);
  
                    //total de todos o s itens
					$total = ($total + $subtotal);
					                     
  
                // checa se tem itens que nao entram na soma do pedido minimo
                $result = app('db')->select("SELECT as_produtos.preco FROM as_produtos WHERE id = $id AND as_produtos.pedido_min = 'Y'");
				
				//soma o valor total dos itens que nao entram na soma do pedido minimo
				$total_cigarro = app('db')->query("SELECT SUM(preco) AS total FROM as_produtos WHERE pedido_min = 'Y' AND id = $id ")->fetchColumn();
				$checaCigarro = $total - $total_cigarro;
  
  
                //checa de atingiu o pedido minimo
		        if ($total < $config['ped_minimo']) {
					
					echo "O pedido mínimo é de R$ ".$config['ped_minimo'].",00";
					
				
				//se tem itens que nao entram na soma do pedido minimo e soma 
				} else if (count($result) >= 1) {
					
					if ($checaCigarro < $config['ped_minimo']) {
						
						
						  echo "Cigarros não entram na soma de R$ ".$config['ped_minimo'].",00 do pedido mínimo.";
					}
																							
      ?>
                
                 <!-- PRODUCT -->
                  
                     AQUI ENTRAM AS INFORMACOES DE CADA ITEM
                    
                    <!-- END PRODUCT -->
                    
                     
                   <?php endforeach; ?>
  
  

 

Share this post


Link to post
Share on other sites

Saudações, Gabriel

 

Você utilizar o código da seguinte forma.

<?php
   //Variável traz o Código do Cliente Logado
   $codClie = "$userClientes_clienteId";

   $sql_pegaAtivos = "SELECT pro.codProdClie, pro.produtoDescr, pro.apres_unid, pro.clientes_clienteId, cr.cotaRespId, 
                             cr.cotaRespQtde, cr.cotaRespVlrUnit, cr.codProdClie, cr.clientes_clienteId, cr.cotacaoItens_cotaItensId, 
                             cr.cotaRespStatus, cr.cotaNumero, cr.cotaRespCompra, cr.cotaPertence,
                             SUM(cr.cotaRespQtde * cr.cotaRespVlrUnit) as soma
                        FROM cotacaoResposta cr
                  INNER JOIN produto pro ON pro.codProdClie = cr.codProdClie
                       WHERE cr.cotaNumero = :cotaNumero
                         AND cr.cotaPertence = pro.clientes_clienteId
                         AND cr.clientes_clienteId = '$codigoClie'
                         AND cr.cotaRespCompra = '1'
                    GROUP BY cr.cotacaoItens_cotaItensId ";  

                    try{
                        $query_pegaAtivos = $conecta->prepare($sql_pegaAtivos);
                        $query_pegaAtivos->bindValue(':cotaNumero',$cotaNumero,PDO::PARAM_STR);
                        $query_pegaAtivos->execute();

                        $resultado_pegaAtivos = $query_pegaAtivos->fetchAll(PDO::FETCH_ASSOC);
                        $count_pegaAtivos = $query_pegaAtivos->rowCount(PDO::FETCH_ASSOC);

                        } catch(PDOexception $error_pegaAtivos) {
                          echo 'Erro ao pegar ativos';
                        }

                foreach($resultado_pegaAtivos as $resAtivos){              
                        $cotaRespId         = $resAtivos['cotaRespId'];     
                        $cotaRespQtde       = $resAtivos['cotaRespQtde'];     
                        $cotaRespVlrUnit    = $resAtivos['cotaRespVlrUnit'];
                        $cotaRespStatus     = $resAtivos['cotaRespStatus'];
                        $cotaRespCompra     = $resAtivos['cotaRespCompra'];
                        $cotaPertence       = $resAtivos['cotaPertence'];
                        $cotaNumero         = $resAtivos['cotaNumero'];
                        $codProdClie        = $resAtivos['codProdClie'];
                        $clientes_clienteId = $resAtivos['clientes_clienteId']; 
                        $valorQtvUn         = $resAtivos['soma']; //Está variável traz o resultado do (SUM(cr.cotaRespQtde * cr.cotaRespVlrUnit) as soma)
                        $produtoClie        = $resAtivos['codProdClie'];
                        $descrProd          = $resAtivos['produtoDescr'];
                        $apresProd          = $resAtivos['apres_unid'];

?>
                                                                    
       <div class="box-body" style="font-size:13px; line-height:0.5;">
            &bull;&nbsp;<?php echo $produtoClie;?> - <?php echo $descrProd;?> - 
            R$ <?php echo number_format($valorQtvUn,2,",",".");?>
       </div>

       <?php } ?><!--/. Fim do: Foreach Relação Produto X CotaçãoResposta-->
                                            
     
      <td align="right" width="15" height="10" style="font-weight:bold; color:#035803; font-size:16px; background:#E1FFF7;" >
          <?php echo number_format($totalQtvUn,2,",",".");?>
     </td>
     <td align="right" width="15" height="10" style="font-weight:bold; font-size:16px; background:#FEFFD1;" >
         <?php echo $faturaMinimo; ?>
    </td>  
    <?php if($vrFinal < '0') { ?>                                  
          <td align="right" width="15" height="10" style="font-weight:bold; color:#F70000; font-size:16px; background:#F3F7F6;">
              <?php echo number_format($vrFinal, 2, ",", "."); ?>
          </td> 
    <?php } else { ?>
          <td align="right" width="15" height="10" style="font-weight:bold; color:#010162; font-size:16px; background:#F3F7F6;">
              <?php echo number_format($vrFinal, 2, ",", "."); ?>
         </td>
                                       
    <?php } ?> 

 

 

Espero ter ajudado com o exemplo acima.

 

Cesar

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 Anonicah
      Olá preciso de ajuda com esse exercício. Montei até a parte de formulário + validação de javascrip no dreamweaver mas buguei com o resto. O que eu fiz:
       

      <html>
      <head>
      <title> Formulário CPF validado com Java Script </title>
          
          <script language="javascript" type="text/javascript">
      function validar() {
      var cpf = form1.cpf.value;
          
      if (cpf == "") {
      alert('Preencha o campo com seu cpf');
      form1.cpf.focus();
      return false;
      }
          
      }
      </script>
          
          
      </head>
      <body>
      <form name="form1" action="enviar.php" method="post">
      CPF:
      <input name="cpf" type="text"><br /><br />
      <input type="submit"  onclick="return validar()">
      </form>
      </body>
      </html>
       
       
      EXERCÍCIO
      Criar um formulário simples em html com um único campo CPF;
      Fazer uma validação em javascript antes de fazer o post;
      Consumir o WS https://bi.vidaclass.com.br/utils para consultar informações do CPF enviado pelo form;
      Do retorno obtido exibir na tela:
      Nome, email, telefone
      Se tem compra em saude: Sim | Não
      Quantas compras: (5) ex.
      Se tem farma: Sim | Não
      Se tem dependente: Sim | Não
      Qtd. de dependentes: (2) ex.

      Obtem o token para consumir os endpoints;
      https://bi.vidaclass.com.br/auth
      {
          "company_id": 1,
          "username": "webmaster@vidaclass.com.br",
          "password": "Teste20170705"
      }
      Endpoint para consultar o CPF
      https://bi.vidaclass.com.br/utils
      {
          "action": 4,
          "key": {
              "cpf": 25383193820
          }
      }
    • By Luciano Marques
      Então pessoal é o seguinte: Estou tendo problemas para impedir acesso simultâneo no meu projeto. Foi depois de muito pesquisar que vim aqui abrir esse tópico. 
      Enfim, eu até consegui colocar uma teoria em prática que era a de criar uma coluna na tabela `usuarios` com 1 para ativo, e 2 para  inativo. e depois coloquei no topo a condição IF para se 1 já preenchido não permite o login. até ai de boa. o problema vem se o usuário não desloga só fecha a janela. a coluna ainda permanece como ativa 1. mesmo expirando o login, não ocorre o update na base de dados. Se alguém puder me ajudar nessa, preciso concluir esse trabalho ainda essa semana. desde já agradeço 
    • By paulojk
      Como faço essa funçao alguem sabe? Depos que o usuario clica no botao so libera depois de um determinado tempo.
       


    • By Anderson Maciel
      Boa tarde pessoal,

      Estou quebrando a cabeça para resolver um problema, tenho uma div dinâmica que carrega uma <table> em uma das colunas deveria apresentar o componente Switchery, esta <table> é montada a partir de uma função PHP que faz o select em uma tabela do banco de dados conforme abaixo:
       
      echo '<table class="table table-hover"> <thead> <tr> <th>Nome</th> <th>Agrupamento</th> <th>Ativo</th> </tr> </thead> <tbody>'; foreach($data as $row) { If ($row['ativo'] == 1) {$vativochk = "checked";} else {$vativochk = "";} echo '<tr> <td>'.$row['nome'].'</td> <td>'.$row['agrupamento'].'</td> <td><input type="checkbox" name="ativo_grid" class="js-switch" '.$vativochk.' disabled="disabled"></td> </tr>'; } echo ' </tbody> </table>'; Aqui está o Ajax que chama e retorna atualizando a DIV:
      //funcoes do grid dos graficos function atualiza_grid_graficos() { $.ajax({ type: "POST", url: "hubfuncind.php", data: { id_tabindicadores_paineis: $('#id_tabindicadores_paineis').val(), acao: "gridgraficos" }, success: function(data) { $('#conteudo').html(data); } }); } O retorno vem certinho, mas apenas o componente Switchery está vindo desconfigurado, ou seja vem um checkbox normal (html).

      O que é mais incrível é que neste mesmo formulário mais acima tenho este mesmo componente funcionando normalmente, somente dentro da DIV dinâmica é que fica desconfigurado conforme imagem anexa.

      Será que alguém já passou por isso?

    • By violin101
      Caros amigos membros do grupo, saudações...
       
      Gostaria de tirar uma dúvida com os amigos.
       
      Tenho uma rotina onde consigo efetuar o Download de arquivos para uma pasta dentro do sistema, o que preciso seria mudar o nome do arquivo, por exemplo:
       
      após selecionar  o arquivo criado com o nome de: ESTOQUE.PDF
       
      gostaria de gravar na pasta de upload's com um novo nome, como por exemplo: cliente[1]-estoque.pdf.
       
      Onde poderia fazer essa alteração na rotina abaixo, para gravar o arquivo com um novo nome ?
       
      abaixo posto o fonte da rotina.
      <?php public function anexar() { $this->load->library('upload'); $this->load->library('image_lib'); $upload_conf = array( 'upload_path' => realpath('./assets/anexos'), 'allowed_types' => 'pdf|PDF|doc|DOC|docx|DOCX', // formatos permitidos para anexos de os 'max_size' => 1024, ); //Recebe a variável via POST $validade = $this->input->post('validade'); $this->upload->initialize($upload_conf); foreach ($_FILES['userfile'] as $key => $val) { $i = 1; foreach ($val as $v) { $field_name = "file_".$i; $_FILES[$field_name][$key] = $v; $i++; } } unset($_FILES['userfile']); $error = array(); $success = array(); foreach ($_FILES as $field_name => $file) { if (! $this->upload->do_upload($field_name)) { $error['upload'][] = $this->upload->display_errors(); } else { $upload_data = $this->upload->data(); if ($upload_data['is_image'] == 1) { // set the resize config $resize_conf = array( 'source_image' => $upload_data['full_path'], 'new_image' => $upload_data['file_path'].'thumbs/thumb_'.$upload_data['file_name'], 'width' => 200, 'height' => 125 ); $this->image_lib->initialize($resize_conf); if (! $this->image_lib->resize()) { $error['resize'][] = $this->image_lib->display_errors(); } else { $success[] = $upload_data; $this->load->model('Dados/Dadosclie_model'); $this->Dadosclie_model->anexar($this->input->post('idCli'), $this->input->post('descricao'), $validade, $upload_data['file_name'], base_url().'assets/anexos/', 'thumb_'.$upload_data['file_name'], realpath('./assets/anexos/')); } } else { $success[] = $upload_data; $this->load->model('Dados/Dadosclie_model'); $this->Dadosclie_model->anexar($this->input->post('idCli'), $this->input->post('descricao'), $validade, $upload_data['file_name'], base_url().'assets/anexos/', '', realpath('./assets/anexos/')); } } } if (count($error) > 0) { echo json_encode(array('result'=> false, 'mensagem' => 'Nenhum arquivo foi anexado.')); } else { echo json_encode(array('result'=> true, 'mensagem' => 'Arquivo(s) anexado(s) com sucesso .')); } } ?>  
      Grato,
       
      Cesar
×

Important Information

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