Carrinho de Compras com PHP

Nessa vídeo aula iremos aprender como criar um carrinho de Compras usando Session, adicionando, removendo produtos, e alterando a quantidade.

Código da Vídeo Aula

Tabela Produtos

    Tabela: produtos
    id INT AUTO_INCREMENT PRIMARY KEY
    nome VARCHAR(255)
    preco DECIMAL (10,2)
    imagem VARCHAR(50)

conexao.php

    <?php mysql_connect("localhost", "root", ""); mysql_select_db("mxmasters"); ?>

index.php

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Video Aula sobre Carrinho de Compras</title>
    </head>

    <body>
    <?php
          require("conexao.php");
          
          $sql = "SELECT * FROM produtos";
          $qr = mysql_query($sql) or die(mysql_error());
          while($ln = mysql_fetch_assoc($qr)){
             echo '
<h2>'.$ln['nome'].'</h2>

';
             echo 'Preço : R$ '.number_format($ln['preco'], 2, ',', '.').'
';
             echo '<img src="image/'.$ln['imagem'].'" /> 
';
             echo '<a href="carrinho.php?acao=add&id='.$ln['id'].'">Comprar</a>';
             echo '
<hr />

';
          }
    ?>

    </body>

    </html>

carrinho.php

    <?php session_start(); if(!isset($_SESSION['carrinho'])){ $_SESSION['carrinho'] = array(); } //adiciona produto if(isset($_GET['acao'])){ //ADICIONAR CARRINHO if($_GET['acao'] == 'add'){ $id = intval($_GET['id']); if(!isset($_SESSION['carrinho'][$id])){ $_SESSION['carrinho'][$id] = 1; }else{ $_SESSION['carrinho'][$id] += 1; } } //REMOVER CARRINHO if($_GET['acao'] == 'del'){ $id = intval($_GET['id']); if(isset($_SESSION['carrinho'][$id])){ unset($_SESSION['carrinho'][$id]); } } //ALTERAR QUANTIDADE if($_GET['acao'] == 'up'){ if(is_array($_POST['prod'])){ foreach($_POST['prod'] as $id => $qtd){
                      $id  = intval($id);
                      $qtd = intval($qtd);
                      if(!empty($qtd) || $qtd <> 0){
                         $_SESSION['carrinho'][$id] = $qtd;
                      }else{
                         unset($_SESSION['carrinho'][$id]);
                      }
                   }
                }
             }
          
          }
          
          
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Video Aula sobre Carrinho de Compras</title>
    </head>

    <body>
    
<table>
        
<caption>Carrinho de Compras</caption>


<thead>

<tr>
                
<th width="244">Produto</th>


<th width="79">Quantidade</th>


<th width="89">Pre&ccedil;o</th>


<th width="100">SubTotal</th>


<th width="64">Remover</th>

              </tr>

        </thead>


<form action="?acao=up" method="post">

<tfoot>
               
<tr>
                
<td colspan="5"><input type="submit" value="Atualizar Carrinho" /></td>


<tr>
                
<td colspan="5"><a href="index.php">Continuar Comprando</a></td>

        </tfoot>


<tbody>
                   <?php
                         if(count($_SESSION['carrinho']) == 0){
                            echo '
<tr>
<td colspan="5">Não há produto no carrinho</td>
</tr>

';
                         }else{
                            require("conexao.php");
                                                                   $total = 0;
                            foreach($_SESSION['carrinho'] as $id => $qtd){
                                  $sql   = "SELECT *  FROM produtos WHERE id= '$id'";
                                  $qr    = mysql_query($sql) or die(mysql_error());
                                  $ln    = mysql_fetch_assoc($qr);
                                  
                                  $nome  = $ln['nome'];
                                  $preco = number_format($ln['preco'], 2, ',', '.');
                                  $sub   = number_format($ln['preco'] * $qtd, 2, ',', '.');
                                  
                                  $total += $ln['preco'] * $qtd;
                               
                               echo '
<tr>       
                                     
<td>'.$nome.'</td>


<td><input type="text" size="3" name="prod['.$id.']" value="'.$qtd.'" /></td>


<td>R$ '.$preco.'</td>


<td>R$ '.$sub.'</td>


<td><a href="?acao=del&id='.$id.'">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>

250 thoughts on “Carrinho de Compras com PHP

  1. Otima video aula mas tem um pobleminha,
    O Carrinho nao está somando os centavos
    coloquei um produto de 49,90 e um produto de 60,00 e ele me deu que a soma e igual a 109,00 mas a resposta correta seria 109,90.

    1. Mateus, o que ocorreu é na video aula eu somo o valor já formatado com number_format, o certo seria realizar o somatario, sem o valor formatado, pra na hora de exibir, mostrar o valor.

  2. Ola David
    Tudo bom?

    Postei um questão no video aulas, mas até agora não tive resposta la, vou tentar aqui. !! rssss

    Sou iniciante em PHP e achei super maximo a aula sua sobre carrinho de compra. Peguei seu código e transformei em solicitar somente orçamento, show de bola funfa perfeito, só que o seguinte, cada produto eu fiz em uma pagina cada um, e gostaria de saber como faço com seu código implementar para que ao adicionar no carrinho, seja feito individual para cada produto em paginas diferentes, entendeu? Pois no código atual ele pega pela sequencia dos produtos dentro do DB, e gostaria que ao adicionar o produto ao carrinho de orçamento, ele pegue o produto em questão escolhido. Dá pra você dar uma palhinha nesta questão. e Parabéns pelas aulas, quero um dia poder fazer igualzinho a você!! Abraçosss

    1. Carlos, infelizmente estou sem tempo para responder, mas voltando a sua questão, eu respondi no VAB, e vou colocar a mesma coisa aqui :

      Carlos o procedimento será o mesmo, terá um link na página do seu produto, com o identificador dele, q seria o ID, mais a ação q será feita, q seria add.

          1. Então David,

            o 01 se refere ao ID cadastrado no DB do produto.

            Quando faço essa mesma coisa em uma outra pagina individual de um outro produto, ele sempre adiciona o primeiro produto cadastrado no DB.

          2. Olá David,

            Peguei o código de exemplo de pagina unica, aplique, mas esta dando erros.

            – Neste código de exemplo onde eu configuro a ID certa que ele tem que pegar?

            Se puder me auxiliar fico grato, pois sou novato em PHP..

            Um abração !!

  3. David,

    Consegui acertar para pegar o produto em questão, valeu pelas dicas.
    Queria sugerir uma outra video aula. Criar Area Admin … será que virá ?? rssss

    Abraçosss

    1. Olá David,

      Eu enchendo denovo:

      Esta funcionando tudo certo as funções como deveriam ser, mas fica printado este erro na tela:

      Notice: Undefined index: id in D:\EasyPHP-5.3.8.0\www

      O que pode ser isso, ja fiz de tudo mas não consegui sanar !!!

      Um abração

      1. compleando esta dando erro na linha 6:

        //Conexão com Banco de Dados
        include(‘../../Connections/conexao.php’);

        //resgata o ID da URL
        $id = (int)$_POST[‘id’]; // esta é a linha 6

        //Seleciona o produto filtrado pelo id
        $sql = “SELECT * FROM produtos WHERE id = ‘$id'”;

        //Executa o SQL
        $query= mysql_query($sql);

        //Resgata os valores da tabela
        $row = mysql_fetch_assoc($query);

        1. Carlos, está dizendo que $_POST[‘id’] não existe, quer dizer q vc não está passando via formulário o campo id como método post

          1. Ola David,

            Mudei para _GET, como estava no seu exemplo, mas continua dando o erro !!!

            Help !! rssss

          2. Vamos por partes:

            1 – Na página inicial tem os produtos, e links para mostrar detalhes desse produto
            2 – Os links precisam passar um identificador para vc sabe que produto deve mostrar.
            3 – Para passar uma informação via URL, vc precisa do sinal de interrogação:

            <a href="produto.php?id=1">Detalhe</a>.
            

            Veja que foi adicionado um valor 1, claro isso deveria ser dinamico, como na vídeo aula.

            4 – Quando é clicado no link, ele vai para página produto.php, e vou passar uma informação via URL, no caso uma variável chamada id, que recebe um valor 1.

            5 – Para resgatar um valor da URL, utiliza a variavel superglobal chamada $_GET.

            $id = $_GET['id'];
            

            Pq fiz essa lista ? Para dizer q o erro q está ocorrendo é devido que vc não está passando a informação via URL, no caso o id. Então quando vc tenta pega o valor do ID, esse id na url não existe, ele apresenta essa mensagem q vc está dizendo de erro.

          3. David,

            Cara entendi sua explicação e fiz as alterações, e agora está tudo funcionando, como disse sou novato em PHP, nada como falar com quem entende!

            Cara muito obrigado pela sua paciência e explicação !! Você é o cara !!! rssss

            Ahh.. vc não me respondeu uma questão anterior, tem como fazer uma aula explicando como fazer um Painel Admin?

            Abraços !!!!

          4. Carlos, não tenho previsão de criar video aulas ou tutoriais atualmente, devido ao meu trabalho.

  4. Olá David,
    tudo bom?

    Eu denovo atormentando, rsssss

    Coloquei no ar para funfar o script mas esta dando este erro:

    Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /home/ghedivan/public_html/orcamento-produto.php:1) in /home/ghedivan/public_html/orcamento-produto.php on line 38

    Engraçado que nos testes antes de enviar por definitivo, isto não estava dando erro.

    O que pode ser?

    Um abração !!!

      1. David,

        Eu coloquei uma tag de comentário para ver se inibisse a tal tag html que não estou achando antes da chamada.. o erro parou de apresentar , mas, não esta executando a chamada. eu fiz um teste em outro servidor e funcionou… que configuração no servidor pode ser para habilitar a session_start ?

        1. A ideia é vc colocar o session_start, na primeira linha na sua página. Se vc utiliza query string, onde vc insere o conteudo da página de acordo com a URL, vc colocaria o session_start na index.php, no começo da página, isso vai evitar essa mensagem.

          1. Não funfou David …. da o erro :
            Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /home/ghedivan/public_html/Connections/conexao.php:1) in /home/ghedivan/public_html/index.php on line 3

            Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home/ghedivan/public_html/Connections/conexao.php:1) in /home/ghedivan/public_html/index.php on line 3

            Engraçado que um outro servidor funciona !!!

            Coloquei assim na index.php

            $qtd){
            $id = intval($id);
            $qtd = intval($qtd);
            if(!empty($qtd) || $qtd 0){
            $_SESSION[‘produtos’][$id] = $qtd;
            }else{
            unset ($_SESSION[‘produtos’][$id]);
            }
            }
            }
            }
            }
            ?>

  5. completando o que não saiu no outro comment:

    $qtd){
    $id = intval($id);
    $qtd = intval($qtd);
    if(!empty($qtd) || $qtd 0){
    $_SESSION[‘produtos’][$id] = $qtd;
    }else{
    unset ($_SESSION[‘produtos’][$id]);
    }
    }
    }
    }
    }
    ?>

    1. Coloca a session, antes de inclui a conexão:

      <?php
        session_start();
        include_once('Connections/conexao.php');
       /*Continua o codigo*/
      ?>
      
      1. Salve David,

        aparentemente funfou a session, mas quando abre o carrinho fica essa mensagem

        Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home/ghedivan/public_html/orcamento-produto.php:1) in /home/ghedivan/public_html/orcamento-produto.php on line 1

        Mas o código esta funcionando de acordo

        Abraçossss !!!

        1. Carlos, vc precisa verificar sempre se tem algum html antes do session_start, pra evitar isso, sempre coloque antes de qualquer codigo HTML, essa mensagem só ocorre pq tem algum espaço antes de publicar o session.

          Uma maneira pra vc evitar essa mensagem tbm, é colocar no começo do código:

          Na primeira linha a sua página:

          <?php ob_start()?>
          

          Na uma linha da sua página

          <?php ob_end_flush()?>
          
          1. Salve David,

            Olha já verifiquei, não existe nenhum html antes . E coloquei os parametros que vc passou, mas mesmo assim não funfou !!! mas o código está funcionando direito, só a mensagem no topo da pagina fica aparecendo!!

          2. Carlos, esse mensagem de aviso, é devido algum item antes de ser chamado ele, vou colocar do proprio manual do php

            Lembre-se que header () deve ser chamado antes de qualquer saida, seja pelo HTML, linhas em branco em um arquivo, ou a partir de PHP. É um erro muito comum ler código com include () ou require () , funções ou outra função que acesse arquivos, e ter espaços ou linhas em branco que estão de saída antes de header () é chamado. O mesmo problema existe quando usar um arquivo PHP / HTML simples

  6. Salve David,

    Nada …. continua o problema !! Não sei mais o que fazer .. rsssss

    Fala uma coisa, em todas as paginas tenho que colocar a session_start() ?

    1. Carlos não precisa, a pena q vc precisa recuperar um valor da session. Outra possibilidade, é se estiver um usado o charset para o arquivo usando UTF-8 com BOM, que deixa uma assinatura no começo do arquivo. Se tiver um UTF-8, utilize sem BOM

  7. Boas,

    Estas de Parabéns, meu !!

    Tanto tempo a procura do codigo e consegui encontra-lo e tudo graças a ti.

    Muito obrigado pela a tua ajuda xD

  8. Olá,

    antes de tudo parabens por esta video aula.

    Estou tentando implementar este carrinho de compras em um sistema, mas surgiu uma dúvida.

    vou tentar explicar…

    Na pagina do produto, antes do cliente clicar no botão comprar, ele tem a opção de escolher uma das cores disponiveis para

    aquele produto.
    Quando ele clica em comprar, a página carrinho recebe via $_POST o ID do produto e a COR escolhida pelo cliente. Então o

    sistema grava no array $_session[‘carrinho’] o ID e atribui a quantidade uma ele ficando assim:

    Array([3]=>1 [5]=>2 [13]=>1) e assim por diante.

    Depois, usando foreach eu recupero os outros dados dos produtos usando cada ID q está no $_session[‘carrinho’].

    Até ai funciona direitinho, más a minha dúvida fica em relação ao parâmetro COR.
    Eu não estou conseguindo atribuir a cor escolhida em seus respectivos produtos.

    É possivel fazer isto neste sistema de carrinho de compras?

      1. era exatamente isto q eu estava tentando fazer, porem eu nao consegui colocar pra rodar este código.

        ADICIONAR: o sistema acrescenta apenas 1 item ao carrinho e ao acrescentar outro item, ele está sobrepondo o anterior.

        ALTERAR: quando clica em alterar a quantidade, o item do carrinho desaparece.

        não sei se eu fiz algo de errado mas mesmo assim a sua idéia eh muito boa.

        1. Adriel, repare que é necessário adicionar tanto o Código do Produto, quanto o Código da Cor, ou o nome da cor. Dessa maneira o índice do array ele será sempre único, não sobrescrevendo, veja o exemplo abaixo com nome das cores para ficar mais facil de visualizar:

          $_SESSION['carrinho'][1:Amarelo]  = 1;
          $_SESSION['carrinho'][1:Vermelho] = 1;
          $_SESSION['carrinho'][1:Azul] = 1;
          

          Repare que tenho 3 produto de cores diferentes , para atestar isso basta dá um print_r

          print_r($_SESSION['carrinho']);
          

          A ideia é vc colocar junto com id do produto o codigo da cor, ou nome da cor, transformando esse valor único.

          1. Agora consegui entender e funcionou direitinho, tanto para acrescentar 1 unica opção quanto para varias opções ao carrinho.

            Vlw mesmo… me ajudou muito 🙂

  9. outra coisa q eu me esqueci…

    para reverter o base64_encode(serialize()) eu tive q usar unserialize(base64_decode()).

    do jeito q está no tutorial: $items = base64_decode(unserialize($options)); não funcionou comigo.

  10. Boas David!

    Está a dar um erro ao actualizar. Incrementa automaticamente a quantidade :\

    O problema deve estar no “up”, que não está declarado em nenhum lado.

    //ALTERAR QUANTIDADE
    if($_GET[‘acao’] == ‘up’){

    Se puder ajudar agradecia!

    Obrigado!

  11. Faltava o ?acao=up no action do form, obrigado!

    Espero uma video-aula com a finalização da encomenda 😉

    Continuação de bom trabalho!

  12. Gostaria de saber como faria pra finalizar essa compra, e inserir um cadastro pro cliente e inserir esses dados do carrinho em fatura também !

  13. Olá David,
    primeiramente quero agradecê-lo por dividir seu conhecimento conosco, os iniciantes nessa área em constante inovação.

    Seguindo passo a passo, consegui fazer o carrinho.

    Agora estou querendo personalizá-lo conforme as minhas necessidades, em uma delas eu inclui um botão para solicitar embalagens de presente.

    Comecei a mexer dentro da ação up, mas não sei como fazer para o produto que tiver sido selecionado como embalar para presente seja marcado ao visualizar o carrinho:
    foreach($_POST[‘presente’] as $cod => $pres){
    $cod = intval($cod);
    $pres= isset($pres) ? “on” : “off”;
    echo $pres.”presente $cod “;
    if(!empty($pres) || $pres==”on”){
    }
    }#foreach

    Pode me ajudar?
    Grata

      1. Agradeço pela rápida resposta, mas será que seria este o caso, mesmo?

        Tomara que não rs, agora que eu consegui fazer funcionar certinho (tenho bastante dificuldade com scripts novos para mim).
        Eu já havia olhado este tutorial e vi que lá mudam muitas coisas, eu teria que fazer esta mudança “dástrica” mesmo?

        Obrigada e parabéns pelos tutos e video-aulas

        1. Andreia, vendo sua pergunta, creio que o tutorial não vai te ajudar. Pq no caso vc terá ou produto com embalagem ou sem. Para isso não precisa fazer como tutorial, vc pode trabalhar com array multimimensional

          $_SESSION['carrinho'][5] = array('qtd' => 2, 'embalagem' => 'sim');
          

          Para recuperar, será basicamente a mesma coisa:

          foreach($_SESSION['carrinho'] as $id => $value){
                    echo 'ID:'. $id.'<br />';
                    echo 'Qtd:'. $value['qtd'].'<br />';
                    echo 'Embalagem :'. $value['embalagem'].'<br />';
          
          }
          

          Veja que continuo pega o valor o ID, a quantidade, e agora consigo ver se terá embalagem ou não.

  14. Olá David,
    muito obrigada pela atenção.
    Acredito que isso resolva também o meu problema com o cálculo do frete, hoje eu o calculo e trago o valor no carrinho, mas ao atualizar a página ele perde os valores de CEP e valor_frete, ao tentar jogá-lo para uma sessão exibe erro:

    Fatal error: Uncaught exception ‘Exception’ with message ‘Serialization of ‘SimpleXMLElement’ is not allowed’ in [no active file]:0 Stack trace: #0 {main} thrown in [no active file] on line 0

    Mas como eu utilizaria o array multidimensional com a sessão?
    if(!isset($_SESSION[‘carrinho’])){
    $_SESSION[‘carrinho’] = array();
    }

    MUITO OBRIGADA!!!

    1. Andreia, essa informação vc não vai colocar no carrinho, vc precisa guarda em outra session. Tente fazer um (cast) no valor retornado:

      $_SESSION['frete'] = (string)$xml->frete->valor;
      

      Se vc precisa ter mais informação no frete, ai vc coloca ele em multidimensional, como mostrei no carrinho.

  15. Olá David,
    agradeço muito sua ajuda, mas não estou sabendo em que momento utilizar a sua sugestão. A função que utilizo para calcular o frete é:
    if($_GET[‘acao’]==’frete’){
    function calculaFrete($cod_servico, $cep_origem, $cep_destino, $peso, $altura=’2′, $largura=’11’, $comprimento=’16’, $valor_declarado=’0.50′) {
    # OFICINADANET – Código dos Serviços dos Correios
    $correios = “http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx?nCdEmpresa=&sDsSenha=&sCepOrigem=”.$cep_origem.”&sCepDestino=”.$cep_destino.”&nVlPeso=”.$peso.”&nCdFormato=1&nVlComprimento=”.$comprimento.”&nVlAltura=”.$altura.”&nVlLargura=”.$largura.”&sCdMaoPropria=n&nVlValorDeclarado=”.$valor_declarado.”&sCdAvisoRecebimento=n&nCdServico=”.$cod_servico.”&nVlDiametro=0&StrRetorno=xml”;
    $xml = simplexml_load_file($correios);
    if($xml->cServico->Erro == ‘0’) {
    return $xml->cServico->Valor;
    } else {
    return false;
    }
    }
    #chamo assim
    if(isset($_POST[‘cep’])) {
    $cep_destino=str_replace(“-“,””,$_POST[‘cep’]);
    $cep_origem =”26255170″;
    $peso=”0.2″;
    $cod_servico=”41106″;
    $frete=calculaFrete($cod_servico,$cep_origem,$cep_destino,$peso);
    }
    }#frete
    Onde devo utilizar a Session como você indicou?
    Vou utilizar o valor do frete e o CEP de destino.

    Muito obrigada.

    1. Andreia, desculpe a demora em responder. Mas tente fazer assim:

      
      $cep_destino = preg_replace("/[^\d]/", '', $_POST['cep']);
      $cep_origem  ='26255170';
      $peso        ='0.2';
      $cod_servico ='41106';
      $frete       = calculaFrete($cod_servico,$cep_origem,$cep_destino,$peso);
      $_SESSION['frete'] = (float)$frete;
      
      
      1. Olá David,

        nem sei como te agradecer porque passei vários dias pesquisando e tentando de um jeito, tentando de outro, e nada, pois nenhuma destas minhas tentativas estavam incorretas…

        MUITO OBRIGADA MESMO!!!

        1. É assim mesmo Andreia. Mas o importante é q vc estava tentando fazer, e com isso a gente sempre aprende algo novo, ou aprendemos melhor o já sabiamos.

  16. Olá David,

    cara essa video aula me ajudou muito, fiz tudo certo o carrinho já esta funcionado , mais eu não consigo mostra a imagem do produto no carrinho. como eu poderia ta fazendo isso?

    1. Maicon, veja q apenas coloquei o nome da imagem , vc tem q colocar na hora de exibi o caminho + o nome da imagem.

  17. Olá David, primeiramente quero te agradecer pela video aula e por desponibilizar seu tempo para nos ajudar.
    Quero uma ajuda sua para exibir o total do carrinho de compras na topo do site, onde fica geralmente escrito
    meu carrinho de compras.
    Ex: 20 DVDs + 30 tvs = 50 produtos.

    Te agradeço desde já.

    1. Olá Vicente. Vc pode utilizar uma função do PHP, chamado array_sum com a função array_values:

      O array_values vai retornar um array só com os valores, no caso a quantidade.
      E o array_sum vai fazer o somatorio.

       <?php 
          echo array_sum(array_values($_SESSION['carrinho']));
      ?>
      
  18. valew demais pelo tutorial david…. a opção
    {
    $_SESSION[‘carrinho’][$id] += 1;
    }

    pois ao reinicializar a página com F5 o comprador adicionava mais um item no carrinho

  19. David, o proximo pásso seria pegar os dados do carrinho e salvar na tbla pedidos_produtos e tbla pedidos.

    você pode explicar como fazer?

    no aguardo

    Rodrigo

  20. David, ele esta adicionando certinho o pedido mas pedido_produto nao ta rolando

    seila, acho q nao ta rolando o for na session do carrinho

    git://gist.github.com/2710944.git

  21. Ótimo Tutorial!

    Gostaria de saber como faço para clicar em comprar em comprar e não sair da pagina de produtos.

    Minha intenção é exibir a lista compra em pop up quando clicado em um botão.

    Abraço

  22. Bom dia, muito bom o tutorial! Integrei ao meu site como solicitação de orçamento e funciona perfeitamente. Porém, eu preciso que a quantidade possa ser definida ainda na página de produtos e a quantidade possa ser alterada sem para isso precisar do botão de atualizar, você sabe me dizer como fazer isso? E se é possível só com PHP?

    Obrigada.

    1. Olá Anita. Sobre a quantidade da página de produto, você pode trabalhar com um formulário.

      <form action="carrinho.php" method="post">
      <input type="text" name="qtd" value="1" />
      <input type="hidden" name="id_produto" value="4" />
      <input type="submit" value="Adicionar" />
      </form>
      

      Na hora do carrinho, em vez de trabalhar com get, vc irá trabalhar com post.

      Sobre atualizar a quantidade, sem o botão, isso tbm incluí sem atualizar a página, em forma assincrona ?

      1. David, obrigada pela resposta, ainda mais tão rápida. Sim, na verdade quero que a pessoa altere a quantidade se precisar e já clique em enviar, quero ter certeza de que venha o valor que a pessoa realmente queria, pois há o risco de a pessoa esquecer de clicar nesse botão atualizar.

        Outra coisa, como fazer para escolher mais de um produto? Eu penso em um checkbox ou se o campo de quantidade estiver vazio não pega os dados…

        1. Então Anita, talvez a maneira mais facil, é vc usar o Javascript, para disparar o formulário ao modificar o valor da quantidade. Vamos dizer q na quantidade, eu declara uma classe chamada qtd. E no formulário, de uma id chamada frmCarrinho. Vou exemplifica usando jQuery

          $(function(){
                 $(".qtd").blur(function(){
                      $("#frmCarrinho").submit(); 
                  });
          });
          

          Veja que aqui digo, quando a pessoa clicar a quantidade, e tira o foco do input( blur), ele vai disparar o formulário, assim a pessoa não precisa clicar atualizar.

          Sobre escolher mais de produto, creio que seja uma lista de produtos em uma página, vc pode usar um checkbox, enviando em array, exemplo:

          
          <?php 
          	//Simula as informações do banco
          	$produtos[1] = array('nome' => 'Computador');
          	$produtos[2] = array('nome' => 'Notebook');
          	$produtos[5] = array('nome' => 'HD');
          	$produtos[30] = array('nome' => 'Mouse');
          ?>
          
          <form action="carrinho.php" method="post">
          <?php foreach($produtos as $id => $valor) :?>
          	<?php echo $valor['nome']?> : <input type="checkbox" name="id_produto[]" value="<?php echo $id?>" /><input type="text" name="qtd[<?php echo $id?>]" value="1" />
          <?php endforeach?>
          	<input type="submit" value="Enviar" />
          </form>
          

          carrinho.php

          <?php 
          	$produtos = $_POST['id_produto'];
          	$qtds     = $_POST['qtd'];
          	foreach($produtos as $id){
          		  echo 'ID do Produto Selecionado :'.$id;
          		  echo 'Qtd Selecionada :'.$qtds[$id];
          		  echo '<br /><hr />';
          	}
          ?>
          
          1. Meu site está ficando muito bom, muito obrigada pelas dicas, elas ajudaram muito. Usei elas e implementei mais coisas no código.

            Agora meu problema é outro. Como o carrinho trabalha com POST eu não consigo mais deletar itens ou voltar à página de produtos e acrescentar outros produtos, ele sempre reseta a quantidade (pelo código faz sentido), existe alguma maneira de contornar isso? Por exemplo, depois do foreach do carrinho armazenar os dados na SESSION?

            Agradeço a ajuda.

          2. Anita, vc não precisa apenas trabalhar com post, e vc pode trabalhar com get e post. No caso o POST seria para adicionar e alterar. Já o GET vc pode apenas para deletar; Para voltar ao produto, vc pode colocar um link no produto no carrinho.

  23. Olá David, gostei do vídeo, e agradecer pelo código :D, estou fazendo umas alterações no seu código queria saber como faço para quando pessoa adicione um mesmo produto só que com tamanho diferente, apareça no carrinho de compras:
    Exemplo: Tenis Nike – Tamanho 36 – Valor 50,00
    Tenis Nike – Tamanho 40 – Valor 55,00

    Pois quando clico em adicionar um produto do mesmo seguimento, ele altera produto que ja esta no carrinho. Como faço isso?

  24. Sim, eu havia entendido isso. O meu problema é que após isso eu não consegui mais salvar a session, o botão deletar parece limpar toda a sessão, e não só o item. Sair da página também reseta a sessão.

    Eu acredito que o problema é que no foreach eu não chamo a session em momento nenhum para salvar os dados dela, porém, não estou conseguindo entender onde colocar a session para salvar os dados que vêm do post.

    Como posso colocar o meu código para você visualizar?

    1. Olá Anita. Desculpa essa demora em responder, tive alguns problemas, e só puder voltar agora. Vc poderia me mostrar o código pra ver o q pode está ocorrendo. Coloque no pastebin.com, e depois coloque o link aqui nos comentários.

  25. Olá, parabéns pela video aula fico muito bom.
    Eu estou com o seguinte problema no meu carrinho quando eu atualizo a pagina com F5 ele atualiza a quantidade de produtos no carrinho, como eu posso resolve isso???

    1. Ricardo, vc pode remover essa ação:

       if($_GET['acao'] == 'add'){
                  $id = intval($_GET['id']);
                  if(!isset($_SESSION['carrinho'][$id])){
                     $_SESSION['carrinho'][$id] = 1;
                  }
               }
      
  26. Olá David, obrigado pela vídeo aula, me ajudou muito.
    Porém estou com um problema…
    Se, depois de adicionar um produto ao carrinho eu recarregar a página, usando o próprio navegador, a quantidade de produtos da textbox aumenta. Ela recarrega a página e entende que eu adicionei outro produto ao carrinho. Não sei como resolver isso… Se vc puder me ajudar seria legal…

    Obrigado mais uma vez cara, té mais.

      1. Valeu David, me ajudou muito cara! Achei outra solução para o problema:

        Quando o produto é adicionado ao carrinho usamos GET para pegar o valor do ID, como já falei aí em cima… A solução é colocar um

        <>

        depois que é dado o <>, redirecionando para a mesma página na hora do refresh, a variaivel do GET se perde, e não é incrementado o mais um aos produtos.

        Flw pessoal, té mais!

  27. 🙁
    Poxa, tudo funciona perfeitamente! Mas faltou algum tipo de finalização da transação… Talvez um botão que envie a lista de produtos para um email, finalize a página e redirecione o usuário para uma pagina informando o sucesso da transação, neh?
    Mto obrigado e Aguardo.

  28. Olá David, muito boa a vídeo aula, agora me deparei com um problema… como fazer para enviar e receber os dados do carrinho em outra página? Sei que a pergunta é básica, mas ainda não domino o PHP e estou com essa dúvida…

    vlw

    1. Ronaldo, lembre q guardei essa informação na SESSION, logo poso recuperar em qualquer página, desde q inicie session_start() .

  29. Olá David, ta faltando na atualização o seguinte, se o usuario for no campo de quantidade do carrinho colocar 999999, ele soma deveria ter um limite até 50 ou 20.

    1. Jones, isso vai depender da regra de estoque, mas a ideia do video é ensinar a logica do carrinho , a partir dai você consegue adicionar as suas regras de negócio

  30. é realmente mto difícil para quem é inicializado ha pouco tempo. Já quebrei a cabeça demais hombre!! Olhei o tuto com pagseguro, mas nele não tem nenhuma base que esclareça que variáveis pegar, para enviar os produtos da lista por email … os dados dos clientes chegam traquilamente mas a lista dos produtos nada!!! é lenda!! Uma Luz aew Pls, antes q eu enlouqueça!! 😀

  31. cara esta dando o seguinte erro quando eu clico pra adicionar o produto ao carrinho >Unknown column ‘id’ in ‘where clause’

  32. Olá David

    Obrigado por compartilhar conhecimento isso ajuda bastante principalmente que nem eu que estou começando nesta Área de Desenvolvimento Web
    sua vídeo aula foi muito boa obrigado mesmo 🙂

  33. Boa noite!

    Estou fazendo um site onde o cliente poderá fazer um pedido online.

    Segui a aula do carrinho de compras e está funcionando, mas como posso finalizar o pedido, sem utilizar o pagseguro, somente o cliente informando a forma de pagamento se é dinheiro ou cartão, e o troco, assim incluindo estes dados para o banco de dados. E gerar um pedido com os dados do cliente e os dados da compra, e assim enviar esse pedido por e-mail.

    Grata,

    1. Boa Noite. Vc precisa criar uma tabela pra guardar informações do cliente, dos pedidos, e dos produtos dos pedidos. Fiz um exemplo de como poderia ser.

      Tabela de Pedidos

      O processo seria basicamente:

      O cliente adiciona os produtos no carrinho
      O cliente finaliza a compra
      Se não estiver logado, precisa se logar ou se cadastrar ( tabela cliente)
      Para finalizar adiciona as informação dos pedidos (tabela pedidos), quem é o cliente, forma de pagamento, status da compra
      Depois de adiciona os produtos do pedidos, relacionado ao pedidos (pedidos_produtos)
      Finaliza enviando um email para o cliente, e para o administrador

      1. No meu site para o cliente chegar no carrinho ele precisa estar logado.

        Vocês tem alguma vídeo aula, ou conhecem site ou script que pode me ajudar?

        Obrigada :)!

          1. Só está dando erro nesta parte:

            //Recuperar o ID do Cliente, já logado
            $idCliente = $_SESSION[‘cliente’][‘id’];

            O cliente seria o nome a tabela (cliente) e o id(o campo id da tabela cliente)?

        1. Silva, vc tem duas formas. Ou armazena os preços dos produtos na tabela de pedidos_produtos, dessa forma vc consegue fazer a soma via SQL, exemplo:

          SELECT SUM(preco*qtd) as total FROM pedidos_produtos WHERE id_pedido = 2

          Ou quando vc fizer o loop para inserir os produtos na tabela pedidos_produtos, fazer o somatório, e alterar na tabela pedidos,

          
          $pedido = mysql_query("INSERT INTO pedidos .....");
          $id_pedido = mysql_insert_id();
          $total = 0;
          foreach($_SESSION['carrinho'] as $id => $qtd){
            /*
             Inseri os valores na tabela pedidos_produto
             Faz o somatorio para saber o total do pedido
            */
          }
          
          //aqui faz a alteração do total
          
          mysql_query("UPDATE pedidos SET total = '$total' WHERE id_pedido = '$id_pedido'")
          
          
          1. Fiz assim, mas nao estou conseguindo:

            $total = 0;
            foreach($_SESSION[‘carrinho’] as $idproduto => $qtd){
            $stritens_pedido = “INSERT INTO itens_pedido SET idpedido =’%u’, idproduto = ‘%u’, quantidade = ‘%u’, preco = ‘%u'”;
            $stritens_pedido = sprintf($stritens_pedido, $idpedido, $idproduto, $qtd, $preco);
            mysql_query($stritens_pedido);
            “SELECT SUM(preco*qtd) as total FROM itens_pedido WHERE idpedido = 2”;

            }

            mysql_query(“UPDATE pedido SET total = ‘$total’ WHERE idpedido = ‘$idpedido'”);

            Esta dando erro na variavel preco, e a tabela total é pra fazer na tabela pedido ou itens_pedido?

  34. Ola, boa noite
    esta tudo funcidonando bem porem em vez de aparecer que não há produtos, fica listando uma linha na tabela sem o nome sem o codigo e eu não consigo nem remove-lo.

  35. David, como eu posso fazer um carrinho dessa maneira:
    Eu tenho uma tabela pizza e uma tabela bebidas, cada pizza e cada bebida tem um ID. Então eu criei duas session, uma para pizza e outra para bebida. Depois eu insiro numa tabela pedido os dados do pedido como: codpedido, data, tipopagamento e cliente. Feito isso eu pego o codpedido e adiciono numa tabela detalhespedido onde tem os campos: codpedido, produto, qtd e valor.

    Aí que vem o problema, como eu tenho duas session, eu não consigo inserir os dados das duas juntas.

    Sabe me dizer como resolver ou se eu estou fazendo errado em criar duas session.

    Aguardo.

    1. Marcos, no caso como vc duas sessions, vc pode fazer dois loops sem problema:

      <?php 
      	foreach($_SESSION['bebidas'] as $id => $qtd){
      		//faz a inserção
      	}
      	
      	foreach($_SESSION['pizza'] as $id => $qtd){
      		//faz a inserção
      	}
      ?>
      

      Ou vc pode fazer tudo na mesma session, basta incrementar na chave do array a inicial do tipo de produto pra evitar de sobreescrever, exemplo:

      $tipo = $_POST['tipo']; //b ou p
      $id   = $_POST['id'];
      $qtd  = $_POST['qtd'];
      $key  = base64_encode("$id|$tipo");
      $_SESSION['carrinho'][$key] =  $qtd;
      

      Na hora de listar

      <?php 
      	foreach($_SESSION['carrinho'] as $key => $qtd){
      			//descodifica a chave
      			$codigo = base64_decode($key);
      			//Separa por |, para resgatar ID e TIPO
      			list($id, $tipo) = explode('|', $codigo);
      			switch($tipo){
      				case 'b' : 
      					//SQL para resgatar os dados da bebida
      				break;
      				case 'p':
      				//SQL para resgatar os dados da pizza
      				break;
      			}
      		
      	}	
      	
      ?>
      
  36. David

    Obrigado por responder. Eu já tinha conseguido resolver do primeiro modo que você passou. Mas eu achei o segundo muito interessante. Vou experimentar.

    Obrigado! Abraços

  37. Tambem precisava incluir no banco a forma de pagamento e o troco, mas não deu certo:

    Forma Pagamento

    Selecione…
    Dinheiro
    Cartão Debito

    e o troco

    Troco

    1. Basta criar uma campo na tabela de pedidos para inserir a forma de pagamento escolhida pelo cliente, na hora de finalizar a compra

    1. Olá Joana. Ele adiciona mais um, pq definimos na hora de inserir, se existir esse produto na session, ele incrementa o valor:

       if($_GET['acao'] == 'add'){
                  $id = intval($_GET['id']);
                  if(!isset($_SESSION['carrinho'][$id])){
                     $_SESSION['carrinho'][$id] = 1;
                  }else{
                     $_SESSION['carrinho'][$id] += 1;
                  }
               }
      

      Pra evitar isso basta fazer essa modificação:

       if($_GET['acao'] == 'add'){
                  $id = intval($_GET['id']);
                  if(!isset($_SESSION['carrinho'][$id])){
                     $_SESSION['carrinho'][$id] = 1;
                  }
               }
      

      Pra finalizar precisaríamos armazenar essas informações, ou enviar esses dados por email. Vamos um exemplo de modelagem:

      Exemplo de Modelagem

      Aqui um script q como poderia inserir essas informações na tabelas criadas.

      https://gist.github.com/2655868

      1. Obrigada a parte de inserir mais um produto já está resolvida, só não percebi como finalizo. Por exemplo á beira do botão continuar comprando deveria ter um que diz finalizar compra e guardava os dados na base de dados ou mandava por email e redireccionava para outra página. Era isso que pretendia fazer, só não sei como. Dá para explicar, ou tem outro tutorial para isso? Obrigada 🙂

  38. otima aula…..
    no meu carrinho eu estou usando um input pra passar a quantidade ja no formulario,mas nao to conseguindo passar ela para o carrinho e colocar na tabela de itens…tem como vc me ajudar por favor???

  39. no meu carrinho eu estou usando um input pra passar a quantidade ja no formulario,mas nao to conseguindo passar ela para o carrinho e colocar na tabela de itens…tem como vc me ajudar por favor???

  40. OLA DAVID, EU NAO CONSIGO FINALIZAR O CARRINHO , GOSTARIA DE CRIAR UM FORMULARIO E ENVIAR O FORMULARIO E OS PRODUTOS DO CARRINHO POR EMAIL, JA TENTEI MAS NAO DÁ CERTO, PODE ME AJDAR POR FAVOR?

    1. Olá Silva, infelizmente não dou aula particular, pq realmente estou sem tempo. Se vc precisa criar uma loja virtual, recomendo utilizando opencart, magento, pq tem varios itens já pronto, e vc pode só customizar. Opencart é mais facil de mexer e modificar que o magento.

  41. David, boa tarde.
    Estou com uma dificuldade, no momento da atualização da quantidade, teria como eu realizar uma consulta para que eu possa verificar se a quantidade informada no form é maior que a que tenho no estoque, já quebrei a acabeça, mas não estou conseguindo evoluir, teria como me dar uma luz, antes dele adicionar a quantidade na sessão validar a quantidade.

    1. @Dartanhan, vc pode antes de inserir fazer a verificação?

       function totalQtdProdutos($id){
       	 $query = mysql_query("SELECT qtd FROM produtos WHERE id = '$id'");
       	 $row   = mysql_fetch_assoc($query);
       	 return $row['qtd'];
       }
      

      Para verificar?

      $id = 5;
      $qtd = 1;
       if(!isset($_SESSION['carrinho'][$id])){
       	$total = totalQtdProdutos($id);
       	if($total > $qtd){
       		$_SESSION['carrinho'][$id] = $qtd
       	}
      
       }
      
  42. Ola David, eu construi um carrinho com base na sua aula, So fiz uma alteração, entre a página de produtos (index.php) e o carrinho (carrinho.php), coloquei uma página de visualização(visualizacao.php), para exibir mais detalhes.Como pretendo vender camisetas, a escolha do sexo e do tamanho são importantes, daí essas escolhas estariam na página de visulização. Porém encontrei problemas, por exemplo, criei um formulário de opções tipo “radio” do sexo (masculino ou feminino)e do tamanho(P,M,G,GG)via html com um botão de envio, eu preciso obrigar o comprador a selecionar essas opções antes de clicar no botão comprar e direcionar para o carrinho. Mas é necessário que se faça isso utilizando o msm botão que vc criou no video, este aqui// “echo ‘Comprar‘;// para que a verificação seja feita no carrinho e o produto seja resgatado, ou seja, mesmo que eu use “if” para condicionar que o botão comprar apareça somente depois que for selecionado sexo e tamanho, ele nunca vai aparecer por que eu não enviei o formulario. Existe alguma maneira de vincular o formulario”sexo e tamanho” html, ao botão de compra //”echo ‘Comprar‘;// ????? obrigado! Aguardo resposta.

  43. Boa noite David, segui o seu tutorial e até agora está tudo ok.

    Eu apenas gostaria de exibir duas informações sobre o carrinho no topo do site que fica visível em todas as páginas.

    As informações são quantos itens tem no carrinho e o total da compra.

    Eu até consegui mas nao ta atualizando “em tempo real”, precisa de mais um refresh para ele atualizar e não estou conseguindo encontrar o que está de errado.

    Obrigado

    1. @João, vc pode extrair a informação sempre depois das ações de inserção, alteração e excluir no carrinho, pq como terá q atualizar mesmo, vc resgatará as informações atuais depois das ações

  44. Olá David. Excelente tutorial.
    Estou tentando colocar este carrinho de compras em um WordPress. Estou desenvolvendo um site dinâmico e os produtos não vão ter preços no site, o cliente enviaria os produtos para o carrinho (pedido) e seriam enviados os dados de todos os produtos para o email administrador da loja, para que este envie o orçamento. Sabe como eu consigo fazer a inserção destas páginas no wordpress? Procurei um plugin que fizesse isso mas não achei (wp e-commerce, Woocommerce, etc…)

    O carrinho eu consegui inseri, com ajuda do plugin Allow PHP in Posts and Pages, mas não tenho como testar, uma vez que não sei como insiro o botao “comprar” na descrição do produto.
    Resumindo o que precisaria:
    1-Colocar os produtos (sem preço) no carrinho.
    2-Forçar o cliente a preencher um formulario de cadastro para habilitar a função do botão finalizar compra.
    3-Enviar o email para o administrador.

    Se alguém puder ajudar, mesmo que com uma indicação de um plugin wordpress, agradeço.

    Abço

  45. Rapais muito boa suas aulas, tenho uma duvida eu tenho o modo de pagamento via html só que o retorno não consigo por segurança no preço pessoal altera no form gostaria de mudar para api mais não tenho nem ideia de como chamar a função para pagar, no meu caso é liberação de conta então seria só o id do usuário poderia me dar uma força em como eu faço isso? rs

    1. Não seria interessante vc adotar um e-commerce, como opencart, q já vem como muitos modulos de pagamento, correios, etc. Talvez seja uma alternativa melhor. Caso prefira desenvolver, tem dois posts relacionado ao pagseguro usando a API deles.

  46. Amigão, não sei o que fiz de errado, mas agora o meu carrinho não esta adicionando novos produtos.

    Sempre mostra somente um produto, se eu adicionar outro ao invés de ficar um em baixo do outro só mostra o ultimo adicionado.

    Tem ideia do que pode ser?

  47. Olá,
    Sabe me dizer porque não esta add no carrinho os produtos adicionados?

    Ele só mostra o ultimo produto adicionado, com isso sempre 1.

    Teria alguma ideia do que esta errado?

  48. Quando add o produto só mostra um. Quando adiciono outro é substituído, com isso sempre mostra apenas um.

    Sabe dizer o que pode ser de errado?

    1. Tiago, o q acontece q o ID do produto será chamada do array na Session, vc tem q verificar se vc tá enviando o ID do produto pra ser adicionado na session

  49. Não to conseguindo resolver algo bem simples, formatação de valores.

    Fiz conforme a vídeo aula, tudo está funcionando, index.php e carrinho de compras. o único problema é na soma do subTotal.
    Por exemplo:
    qtd valor subtotal
    1 x 500 = 500
    1x 600 = 600
    Total = 1100,00 // da tudo ok

    2 x 500 = 1000
    1x 600 = 600
    Total = 601,00 // ele não entende valores acima de 1000 ou igual.

    como faço para resolver esse erro? qualquer coisa mando os arquivos.

    1. Carlos, foi erro meu, pq tava somando o valor formatado com number_format, veja q agora no código da aula, q deixei, tá consertado esse problema

  50. Valew pela VA David finalizei a mesma hoje e gostaria de aproveitar ela em um projeto meu, mas me deparei com um situação que não consigo resolver.

    Não consegui pegar o nome do produto na session de jeito nenhum.
    Quando dou um .print_r. ele vem assim:
    Array
    (
    [1] => 2
    [2] => 4
    )

    não consegui passar o nome de jeito nenhum, poderia dar uma dica?
    E aproveitando você teria algo explicando como salvar esse carrinho em um txt. Preciso em txt pois vou importar ele em um sistema aqui da empresa.

    Valeu mesmo e muito obrigado pela atenção.

    1. @Adilson, no carrinho ele só salva o ID do produto, sendo a chave do array, o valor é quantidade. Vc precisa recuperar essas chaves do array, e com ela pesquisar no banco de dados

      $chaves = array_keys($_SESSION['carrinho']);
      $produtos = implode(', ', $chaves);
      $sql = "SELECT * FROM produtos WHERE id IN(".$produtos.")";
      $consulta = mysql_query($sql);
      while($resultado = mysql_fetch_assoc($consulta)){
      
      /*
       Aqui vc recuperar os valores do banco de dados
      */
      
      }
      

      Um exemplo, como salvar os valores do carrinho no txt, separando por: Nome do Produto, Preço, e Quantidade

      
      <?php 
      	//Inicia a Sesssão
      	session_start();
      
      	//Inicia o PDO
      
      	$pdo = new PDO("mysql:host=localhost;dbname=loja", "root", "");
      
      	//Pegar apenas as chaves da SESSION[carrinho]
      	$produtos_id = array_keys($_SESSION['carrinho']);
      	//Transforma o array em um string, separando os valores por virgula
      	$produtos = implode(',', $produtos_id);
      
      	//Monta o SQL
      	$sql = "SELECT * FROM produtos WHERE id IN(:produtos)";
      	//prepara o SQL
      	$stmt = $pdo->prepare($sql);
      	//Atribui ao valor
      	$stmt->bindValue(":produtos", $produtos);
      		//executa o SQL
      	if($stmt->execute()){
      		//atribui os valores retornados do banco a variavel $rows
      		$rows = $stmt->fetchAll(PDO::FETCH_OBJ);
      		//inicia um variavel com array, para guardar os valores
      		$result = array()
      		//percorre os produtos
      		foreach($rows as $row){
      			//Monta: Nome do Produto, Preço, Quantidade
      			$result[] = sprintf('%s;%s;%s', $row->nome, $row->preco, $_SESSION['carrinho'][$row->id]);
      		}
      
      		//Verifica se tem um resultado
      		if($result){
      			//escreve no arquivo carrinho.txt, o carrinho
      			file_put_contents('carrinho.txt', implode("\n", $result));
      		}
      
      	}
      ?>
      
  51. ola David.
    estou começando agora, e to com muitas dificuldades,
    o programa roda perfeitamente, mas quero armazenar, os produtos no Banco de Dados, só que como armazenar, os nomes dos produtos, a quantidade dos produtos , preço final e qual cliente fez o “pedido”
    ??
    GRATO.

  52. Olá David, seu script é excelente…
    Só estou tendo um problema, no inicio estava tudo certinho mas hoje quando clico em algum produto ele já inclui 2 na quantidade do carrinho…

    agradeço desde já

    1. André, vc pode alterar assim:

       //ADICIONAR CARRINHO
               if($_GET['acao'] == 'add'){
                  $id = intval($_GET['id']);
                  if(!isset($_SESSION['carrinho'][$id])){
                     $_SESSION['carrinho'][$id] = 1;
                  }
               }
      
  53. OLá David eu utilizei o seu carrinho e a integração e estou recebendo este erro abaixo.
    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\bv\finalizar.php on line 47

    Fatal error: Uncaught exception ‘PagSeguroServiceException’ in C:\xampp\htdocs\bv\PagSeguroLibrary\service\PagSeguroPaymentService.class.php:100 Stack trace: #0 C:\xampp\htdocs\bv\PagSeguroLibrary\domain\PagSeguroPaymentRequest.class.php(627): PagSeguroPaymentService::createCheckoutRequest(Object(PagSeguroAccountCredentials), Object(PagSeguroPaymentRequest), false) #1 C:\xampp\htdocs\bv\finalizar.php(80): PagSeguroPaymentRequest->register(Object(PagSeguroAccountCredentials)) #2 {main} thrown in C:\xampp\htdocs\bv\PagSeguroLibrary\service\PagSeguroPaymentService.class.php on line 100

    O que pode estar acontecendo ?

    Abraços

  54. Fala David, parabéns pela aula!
    Estou precisando de uma ajuda…estou tentando criar venda de roupas e preciso, veja se consegue entender:
    Selecione o tamanho: P, M, G, GG

    A pessoa vai poder escolher somente um, né?

    Como eu faço isso?
    Pode dar esse help?
    Obrigado, abs!

  55. Olá!!!

    Primeiramente parabéns pela vido aula, ja e o segundo projeto que uso esse carrinho de compra!!!

    Uma duvida que eu tenho como eu faço para mostrar a quantidade total de produtos que tenho no meu carrinho? “voce tem 4 produtos no carrinho”

    1. Henrique, vc pode fazer um loop:

      $total = 0;
      foreach($_SESSION['carrinho'] as $id =&gt; $qtd){
          $total += $qtd;
      }
      echo 'Total de produtos: '.$total;
      
  56. David vc é fenomenal msm, amigo tudo aqui ta bacana, mais não adiciona os valores decimais tipo 50,30 quando adicino no banco só aparece 50,00 pode me ajudar?
    obrigado….

  57. David, eu aqui mais uma vez com minhas perguntas sem…sentido.rs

    Cara, existe alguma forma de oferecer frete GRÁTIS a partir de um CEP específico?

    Abraço

  58. Por favor, estou com uma duvida , e já tentei de outras maneiras , mas não consegui fazer ..

    No vídeo , você tem uma tabela para guardar os pedidos, onde grava a quantidade de produtos , preço , etc..

    No meu caso , eu tenho um tabela de pedidos_produtos , com os campos de id_pedido ,id_pedido, id_produto, quantidade e medida…

    Ai é que tá , nao consigo passar no foreach , os valores que gostaria de quando eu digitar no campo de medidas , e depois no botao atualizar , ele mostrasse o campo como eu modifiquei.

    Já tentei colocar dois foreach , mas nao deu resultado …

    Como eu passo os dados , tanto da quantidade e medidas pelo foreach, de forma que eu digita para cada, um valor diferente , para depois serem gravadas na tabela pedidos_produtos ?

  59. Olá David, eu novamente.rs

    Cara, você pode dar uma explicação?
    Como passar ao pagseguro FRETE GRÁTIS acima de um valor x?

    Abs.

    1. Vladimir, vc pode verificar o total do pedido, e definir o PagSeguroPaymentRequest::setShippingType, como valor 3, de não especifico, claro se tiver usando lib do Pagseguro

  60. Bom dia David,

    Inicialmente gostaria de agradecer pelo vídeo que me ajudou a abrir bastante a mente com relação a criação de um carrinho de compras.
    Eu só gostaria de uma luz para implementação do carrinho de compra que vc ensinou no vídeo, onde quero adicionar ao carrinho a opção de cor.
    Como exemplo tem o site da netshoes, onde na single de cada produto tem a opção de cor e ao finalizar a compra o sistema repete id do produto com cor e quantidade diferente.
    Pode me ajudar a implementar essa opção utilizando o código que ensinou no vídeo?

  61. Show de bola.. eu implementei no código a parte de somar os centavos que no seu código nao estava fazendo.. ficou show de bola! Perfeito!

    Você nem sabe como me ajudou postando seu código e essa vídeo aula. Muito obrigado.

    Sucesso! Abraço!

  62. Ola, admiro seu empenho!!!

    Estou constituindo um sistema e preciso que seu carrinho de compras se integre com o boletophp, pode ajudar?
    Tem algum botão de doação no seu site, gostaria de contribuir para seu trabalho, espetacular!

    1. Bruno, se precisa algo já pronto, pra produção, recomendo utilizar um ecommerce, como OpenCart, que vem com todas as funcionalidade, inclusive vc encontra modulos de pagamentos com boleto bancário.

  63. Viva David,
    Entre muitos projectos de carrinhos gostei do seu, assim como do seu video/aula.
    Fiz a experiência, que no Xamp, quer no próprio server do meu site, funciona tudo Ok excepto a imagem que não aparece.
    Aparece apenas aquele quadrado quando há falta de imagem adicionada.
    Tem conhecimento deste problema da parte de outros seguidores?
    Como poderei resolvê-lo?
    Cumprimentos
    Abel Nunes

  64. David me da uma ajuda pelo amor de Deus, n Consigo enviar os dados da session por email, estou usando teu carrinho em um site de orçamento e necessito urgente da sua ajuda pra poder implementar essa parte, so ela que esta falatndo pra funfar 100%, se puder ajudar serei grato eternamente.

    vlw, sou seu fã.

  65. Olá outra vez David, estou com uma dúvida, nesse seu carrinho tem como passar os parametros da session sem sair da pagina do produto, tipo quando a pessoa clicar em add ao carrinho aparecer um modal dizendo que o produto foi add, ai é so fechar o modal, sem sair da pagina do produto, Eai David isto é possivel?, utilizando seu modelo de carrinho.. Obg fico no aguardo pela resposta..

  66. Primeiramente queria agradecer pela vídeo aula maravilhosa, obrigado por compartilhar seu conhecimento. Sou iniciante em PHP, e estou tentando fazer um sistema de orçamento, segui sua vídeo aula deu tudo certo, só não estou conseguindo pegar a lista de produtos que estão no carrinho e manda-la por email, queria pegar os produtos diretos sem ter q armazenar no DB. Poderia me dar uma dica de como fazer isso ?

    1. Wendel, vc irá fazer a mesma coisa q vc faz na página do carrinho, iniciar a session, e recuperar o valores da $_SESSION[‘carrinho’]

  67. Ola David, excelente tutorial parabéns.
    Será que seria algo muito difícil colocar alem do valor total dos produtos no carrinho, o valor total da quantidade também ?.

    1. Jhonatan, o valor total da quantidade vc pode fazer assim:

      echo &quot;Total Quantidade: &quot;.array_sum($_SESSION['carrinho']);
      
  68. Olá David, primeiramente obrigado pela vídeo-aula, excelente informação, ela tem me ajudado muito.
    Bom, sou iniciante em programação e estou tentando fazer uma alteração porém sem sucesso. Gostaria de aplicar a opção de quantidade ainda na tela dos produtos, vi em outro comentário uma dica sua, mais não consegui fazer.
    Você tem alguma dica de como posso fazer isso?
    Obrigado!

  69. Boa Noite.
    Bom Primeiramente parabéns pelo post, muito bom.
    Se puder me ajudar, ficarei grato.

    Bom, nao entendo muito de programação. Fiquei com uma duvida. aqui neste post você usa tabela.
    Estou tentando criar um carrinho apenas com input type check box. Ai tudo bem.
    E que preciso, quero que quando a checkbox for checada, todas as mesmas apareçam numa div ao lado. para que a pessoa saiba o que esta no carrinho. sem sair da pagina. Deposi de toda a compra que seja enviado tudo para o carrinho.

    Att. Obrigado desde ja.

    1. Anderson, vc pode verificar na session, se o id do produto foi add, exemplo:

       $id_produto = 5;
      
       if(isset($_SESSION['carrinho'][$id_produto])){
         //Esse produto está no carrinho
      }
      
      
  70. Cara, muito bom esse tutorial me ajudou bastante, atualmente algumas coisas na sintaxe mudaram e corrigi, funcionando normal, porem encontrei alguns “bugs”, no meu projeto se vc clicar para comprar um produto ele ira adicionar no carrinho, até ai tudo bem, só q se a pagina for atualizada ele reenvia a ação e adiciona novamente o produto, aumentando a quantidade. Outra coisa é que se o carrinho estiver vazio e o usuário clicar sobre o botão de atualizar não haverá tratamento e isso ocasionará um erro. Queria q vc me ajudasse na resolução desses probleminha pois sou iniciante nessa área.

    Agradeço desde já.

    1. Alexsandro, o incremento, é uma condição q coloquei no código q pode ser retirada, basta tirar parte que incrementa (+= 1), onde tá o adicionar o carrinho.

      Sobre o atualizar, vc pode verificar se o carrinho tem algum produto, e mostrar a tabela só se tiver algo.

      Espero te ajudado. abrs

  71. olá pessoal está uma beleza esse exemplo, porém ele utiliza o mysql_conect, que não é mais aceito. Então aconselho vcs a mudarem claro para a orientação a objetos com MVC ou pelo menos o mysqli, a qual segue o exemplo:

    conexao.php

    <?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "seu banco";

    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $dbname);
    // Check connection
    if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
    }

    index.php

    Video Aula sobre Carrinho de Compras

    0) {
    // output data of each row
    while ($ln = mysqli_fetch_assoc($result)) {
    echo ” . $ln[‘nome’] . ‘ ‘;
    echo ‘Preço : R$ ‘ . number_format($ln[‘preco’], 2, ‘,’, ‘.’) . ”;
    echo ‘ ‘;
    echo ‘Comprar‘;
    echo ”;
    }
    } else {
    echo ‘Nenhum produto encontrado’;
    }
    ?>

    carrinho.php

    $qtd) {
    $id = intval($id);
    $qtd = intval($qtd);
    if (!empty($qtd) || $qtd 0) {
    $_SESSION[‘carrinho’][$id] = $qtd;
    } else {
    unset($_SESSION[‘carrinho’][$id]);
    }
    }
    }
    }
    }
    ?>

    Video Aula sobre Carrinho de Compras

    Carrinho de Compras

    Produto
    Quantidade
    Preço
    SubTotal
    Remover

    Continuar Comprando

    <?php
    if (count($_SESSION['carrinho']) == 0) {
    echo 'Não há produto no carrinho’;
    } else {
    require(“conexao.php”);
    $total = 0;
    foreach ($_SESSION[‘carrinho’] as $id => $qtd) {
    $sql = “SELECT * FROM produtos”;
    $result = mysqli_query($conn, $sql);
    $ln = mysqli_fetch_assoc($result);

    $nome = $ln[‘nome’];
    $preco = number_format($ln[‘preco’], 2, ‘,’, ‘.’);
    $sub = number_format($ln[‘preco’] * $qtd, 2, ‘,’, ‘.’);

    $total += $ln[‘preco’] * $qtd;

    echo ‘
    ‘ . $nome . ‘

    R$ ‘ . $preco . ‘
    R$ ‘ . $sub . ‘
    Remove
    ‘;
    }
    $total = number_format($total, 2, ‘,’, ‘.’);
    echo ‘
    Total
    R$ ‘ . $total . ‘
    ‘;
    }
    ?>

  72. Olá David,
    Excelente seu código. Adaptei para minha necessidade, no entanto tenho um problema que não consigo resolver e gostaria de sua ajuda.
    Estruturei meu projeto de forma que qualquer coisa via POST é filtrada e enviada para uma fachadaN (de negócios) que cria ou acessa os objetos que se conectam com um bco. Qualquer coisa via GET é enviada para uma fachadaV (se visão) que controla as telas para serem exibidas.
    Não seria possível utilizar um link em vez de um botão submit para a acao up? Eu estou tentando isso, mas quando clico em atualizar ele volta aos dados originais…

      1. Olá David, gratíssima por sua atenção. Exatamente! O meu carinho precisa de qua a função UP, seja feita através do link, assim como ADD e REMOVER são feitos, sobretudo porque o botão SUBMIT em meu carrinho efetua já a finalização e procede às alterações no bco de dados. Não posso ter 2 botões submit, não é mesmo?
        Então…, tentei serializar os dados, e passá-los através de um link UP, mas não tive êxito.
        Hoje pensei em fazer exatamente com em sua instrução (através do ‘method POST’), mas então.. como eu faria para finalizar o carrinho e enviar para o banco os novos dados?

          1. Olá novamente, David.
            Sim, era exatamente isso. Mas a boa notícia é que consegui resolver o problema da seguinte forma: A atualização ficou exatamente como em seu código (por method post) através de um submit.
            Adicionalmente, criei um link FINALIZAR que envia todos os dados para uma nova página “finalizar.php” e aí sim, criei um botão “submit”que envia os dados para o banco e encerra a session. Fechou direitinho, rápido e fácil.
            Agora, quero somente parabenizá-lo por sua postagem, que… acredite, foi o melhor script que encontrei para isso. É simples, direto e limpo. Vejo que a postagem é antiga, mas é bastante útil. Parabéns também pelo site, e pela atenção com os comentaristas.
            Já está na minha lista de favoritos. Abraços!

          2. Essa videoaula é de 2010, já tem um bom tempo. A extensão mysql_ está depreciada, o código está espagueti, regra de negocio com html, mas o importante é logica aplica no carrinho, a partir dai vc pode criar OOP, Funcional, Procedural, etc. Q bom q a aula te ajudou. abrs

  73. Meu projeto está estruturado em OOP, e uso o modelo VMC. bem definido. Uso PDO em vez das funções mySql, mas jamais tinha feito um carrinho.. por sinal o meu é de troca de pontos e gera vales e cupons em percentual proporcional. Mas a estrutura de seu código é bem clara, não importa o tempo. A ideia é o que eu precisava e você passou com clareza. Você me ajudou bastante. Agora, preciso ver um layout css bem minimalista usar no meu projeto. Recomenda algum? (seguro e simples).

  74. Uma pergunta , estou a tentar passar o valor da quantidade através de uma select option da pagina de produtos , faço post dela no inicio e fica tudo bem mas quando carrego no botão de eliminar da o erro de undifined index, como faço?
    Agradeçia uma resposta o mais brevemente possivel pois este trabalho decide se eu passo de ano ou não
    cumps
    Ricardo Pires

    1. Isso tá informando se que o item no array q vc tá chamando, não existe. Nesse caso, utilize o isset pra verificar se existe esse elemento no array:

      $items = array();
      
      if(isset($items['cart'])){
         echo "Existe o indice no array";
      }
      
  75. Obrigado !Já agora tem uma ideia de como pegar nos valores num botão final e adicionar a uma tabela fatura? Obrigado

    1. Como as referencia dos ID do produto e quantidade estão na session, basta iniciar a session, e recuperar os valores, como foi feito para mostrar o carrinho, e assim gravar numa tabela da fatura.

  76. Tem alguma ideia de como pegar no carrinho e fazer um array tridimensional para adicionar mais um valor? (tamanho)
    Obrigado

  77. Muito obrigado pela ajuda e muito bom conteudo! Mas só não percebo uma coisa, é mesmo preciso o ” sprintf(‘%s:%s’ ” ? E se sim o que faz?

    1. Não é preciso, ali é só formatar a informação, se um jeito mais fácil de visualizar. Mas poderia ser assim:

       $indice  =  (int)$id. ":".(int)$cor_id;
      
  78. Bom dia,

    A vídeo aula é ótima e está funcionando certinho, só estou tendo problemas para alinhar tudo dentro da tabela. Quando eu incluo o produto ele fica fora da tabela e tudo misturado e desalinhado e isso só ocorre quando eu exibo os dados no echo. Não consigo deixá-los dentro da tabela de jeito nenhum e só ocorre depois que incremento o php.

    1. Marcelo, provavelmente vc deve tá esquecendo algum tr, q engloba os itens do produto, por isso deve tá ficando fora.

      1. Eu consegui acertar, realmente eu estava esquecendo tr para finalizar.

        Agora no caso, se eu quisesse exibir os dados do carrinho em uma outra página como se fosse um pequeno relatório só para mostrar o que foi comprado, como eu teria de fazer? Teria que salvar o carrinho no banco de dados e puxar ele na outra página?

        1. Marcelo, pra finalizar compra, seria interessante salvar os produtos num banco de dados, pra depois conseguir fazer esse relatório.

  79. Bom dia David,

    Estou começando no php e deu pra ter uma ótima noção pela sua video aula, está de parabéns. Agora eu estou com uma dúvida, se eu quisesse colocar o botão de “Atualizar” igual ao de “Apagar” como ficaria? Eu poderia seguir o mesmo exemplo do “Apagar” e colocar um ‘‘? Estou tentando fazer isso mas ele dá que a variável prod não está declarada, mas ela está la em cima no comando de “Atualizar”.. Como eu poderia fazer isso?

    1. Vc quer atualizar individualmente, creio q seja isso. As invés de um campo, vc pode adicionar um form dentro do while, e passaria o id do produto e quantidade

  80. Boas , no botão de remover como posso fazer para obter o valor de quantidade associado ao codigo?
    Cumprimentos

  81. o que eu quero tirar daqui e o valor tamannhos correspondente ao cod ,para meter numa query mas nao tou a conseguir
    if($_GET[‘acao’] == ‘del’){
    $cod =$_GET[‘cod’];

    if(isset($_SESSION[‘cart’][$cod])){

    $_SESSION[‘cart’][$cod];
    $tamanhos=$_SESSION[‘cart’][$cod][1];
    $ligaBD=odbc_connect(‘basededadospap’,”,”);
    $sql=”SELECT stock FROM detalhes_produtos WHERE cod_produto=’$cod’ AND tamanho=’$tamanhos’ “;
    $resultado=odbc_exec($ligaBD,$sql);
    odbc_fetch_row($resultado);
    $stock2 = odbc_result($resultado,1);

    $conta1 = $stock2 + 1;
    $sql2=”UPDATE detalhes_produtos SET stock=’$conta1′ WHERE cod_produto=’$cod’ AND tamanho=’$tamanhos’;”;
    odbc_exec($ligaBD,$sql2);
    unset($_SESSION[‘cart’][$cod]);

    }
    }

    1. Vc pode passar o por link, essas informações tbm:

      <a href="carrinho.php?acao=del&cod=1&tamanho=2&qtd=1">Excluir</a>
      
  82. Não posso porque está dentro do form que uso pa passar o codigo , so preciso disso para passar o ano , e so queria arranjar o tamanho que esta ao lado do codproduto

  83. Boas queria perguntar duas coisas como posso fazer esta parte

    //Recuperar o ID do Cliente, já logado
    $idCliente = $_SESSION[‘cliente’][‘id’];

    por username e mostra o seu id na base dados

    fiz assim e nao funciona

    $session = $_SESSION[“username”];
    $idcliente = “SELECT idregistos FROM contasregistadas WHERE username = ‘$session'”;
    //Insere as informações do Pedidos
    $strPedido = “INSERT INTO pedidos SET idclientes = ‘%u’, statpedido = ‘%u’, creatpedido = NOW(), altpedido = NOW()”;
    $strPedido = sprintf($strPedido, $idcliente, 0);
    $queryPedido = mysql_query($strPedido);

  84. e tambem a parte do id pedido nao aparece nada
    ///recuperar o ID criado
    $idPedido = mysql_insert_id();
    //insere os produtos dos pedidos
    $sqlPedidoProduto = “INSERT INTO pedidos_produtos SET idpedidos = ‘$idPedido’, idProdutos = ‘$id’, quantidade = ‘$qtd'”;
    mysql_query($sqlPedidoProduto);

    1. Veja se está inserindo, pq mysql_insert_id, retorna a ultima inserção no banco de dados. Lembrando, q a extensões do mysql_* foram descontinuadas, é importante vc já trocar pelo mysqli ou pdo

  85. esta dando um erro nesse codigo, como ficaria passando para mysqli
    $sql = “SELECT * FROM produtos WHERE id= ‘$id'”;
    $qr = mysql_query($sql) or die(mysql_error());
    $ln = mysql_fetch_assoc($qr);

  86. Olá David, tudo bem?
    Cara, estou com um problema aqui e não faço ideia de como resolver, eu peguei o seu exemplo de carrinho e ele esta funcionando, porém ocorre um problema que parece não ocorrer no vídeo; quando adiciono mais de um produto no carrinho ele alem de adicionar o produto adiciona também mais um no ultimo produto que eu coloque.
    Gostaria de saber se você pode me ajudar. vlw abraço.

  87. Acho que tem um erro na parte de atualizar a quantidade… exatamente nesta parte:
    //ALTERAR QUANTIDADE
    if($_GET[‘acao’] == ‘up’){
    if(is_array($_POST[‘prod’])){
    foreach($_POST[‘prod’] as $id => $qtd){
    $id = intval($id);
    $qtd = intval($qtd);
    if(!empty($qtd) || $qtd 0){
    $_SESSION[‘carrinho’][$id] = $qtd;
    }else{
    unset($_SESSION[‘carrinho’][$id]);
    }
    }
    }
    }
    Ele atualiza o produto pelo índice do array, pulando somente o índice 0. Mas e se eu compro somente 10 exemplares do produto com id = 20, aí vou atualizar a quantidade para 50. Nesse caso, como só temos um produto ele vai atualizar o $_SESSION[“carrinho”][1] quando deveria atualizar o $_SESSION[“carrinho”][20].
    Minha solução:
    //ALTERAR QUANTIDADE
    if($_GET[‘acao’] == ‘up’){
    if(is_array($_POST[‘prod’])){
    foreach(array_combine($_POST[‘prod’], $_POST[‘idItem’]) as $qtd => $id){
    $id = intval($id);
    $qtd = intval($qtd);
    if(!empty($qtd) || $qtd > 0){
    $_SESSION[‘carrinho’][$id] = $qtd;
    }else{
    unset($_SESSION[‘carrinho’][$id]);
    }
    }
    unset($qtd);
    }
    }
    Pelo menos aqui funciona.

    1. Nildo, no caso, o indice do array é o ID do produto, e não a quantidade. Então no input da quantidade, vc passa o ID do produto, e quantidade associada a ele

  88. Corrigindo o comentário anterior: Se eu comprar somente um produto e tentar atualizar a quantidade do mesmo simplesmente não vai atualizar porque quando for colocado no array ele vai ter índice 0, e o foreach() ignora esse índice. Quanto ao $_POST[‘idItem’] trata-se de um <input type="hidden" que eu adicionei ao produto. Assim, quando eu atualizar ele envia não somente a quantidade, mas também o id.

  89. David, felizmente já concertei o erro, mas gostaria de compartilhar essa experiência com todos aqui.

    Comentei linha por linha até que comentei uma linha HTML e deu certo, porem se eu não tivesse feito isso talvez nunca descobriria o que estava fazendo dar erro, pois não sabia que o HTML poderia gerar um erro no PHP.

    Alinha que tirei do meu código foi essa , quando coloco esta linha no código ocorre aquele erro que coloquei no comentário acima.

  90. Pessoal bom estou tentando acrescentar o campo cor no foreach.
    mais por algum motivo o valor da variavel cor é substituido pelo mais recente alguem poderia me ajudar

  91. David, estou criando um marketplace, e estou quebrando a cabeça aqui com o carrinho de compras! Tenho que fazer um carrinho onde o usuário possa compra de várias lojas ao mesmo tempo, porém o pedido é fechado separadamente! Qual a melhor forma de fazer isso? Desde já muito obrigado!!!

    1. Rafael, vc tem algumas formas de vc fazer .

      Provável quando é cadastrado o produto, tem algum identificador, pra dizer que loja pertence.

      Vc pode utilizar esse identificador, para separar os pedidos

      vamos dizer, temos na entidade App\Model\Product\Product, e vc iria adicionar um atributo chamado store, que seja o ID da Loja. Quando adiciona o carrinho, vc passa a loja q pertence.

      Na hora de criar o pedido, vc reorganizar, e criar o pedido por loja. E adiciona os itens, não esquecendo de add de que loja vai pertencer esse produto.

      Um jeito mais simples, é entender que todo item do carrinho se tornará um pedido, mesmo que seja da mesma empresa. Se tem 2 produtos no carrinho, ele se transformará em 2 pedidos.

      E na tabela de pedido, vc informa de q loja ele pertence.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *