PHP: Carrinho de Compras
PHP: Carrinho de Compras

Aew Galera, atendendo a pedidos vou postar aqui uma das coisas que são mais importantes para um desenvolvedor Web, que é desenvolver sites dinâmicos, neste caso em PHP, e a possibilidade de fazer um e-commerce, claro algo como uma loja virtual envolve diversos recursos, questões de segurança, sistemas de pagamentos, etc… mas o primeiro passo é conseguir fazer um carrinho de compras, o que não é nada muito difícil, mas exige um pouco de atenção, e empenho para fazê-lo funcionar.

Vou postar aqui um modelo de carrinho de compras que não foi eu quem desenvolveu, mas peguei o script, e fiz alguns melhoramentos, e ajustes para funcionar de uma forma mais simples. Originalmente esse script foi postado no site PHPBrasil.com [LINK] por um usuário chamado FCCD, não sei se foi ele mesmo quem desenvolveu ou só postou lá, mas enfim, vamos ao que interessa.

Bom, esse sistema do carrinho de compras funciona basicamente com session e array em PHP, é coisa bem simples, e em cima desses 2 recursos (session e array) foi desenvolvida uma classe para facilitar a vida. Lembrando que este script não utiliza nenhum banco de dados para seu funcionamento, mas é claro, se você vai montar uma Loja Virtual, você precisará integrar alguns recursos no momento de exibir os dados dos produtos por exemplo no carrinho de compras.

Nesse primeiro bloco do script, criamos as funções práticas de funcionamento do carrinho, que são as funções de inserir, excluir, e exibir o carrinho de compras. Mas antes disso criamos a classe que se chama carrinho_compra, você pode ver que dentro dessa classe existem 3 funções, uma delas, a inserir_item(), que como o nome já diz, inclui um produto no carrinho, bastando se passa 2 variáveis, uma delas o código do produto e a quantidade, no caso, se o produto já existir no carrinho, será adicionado a quantidade informada a quantidade já existente do produto no carrinho. Em seguida temos a função excluir_item(), que passando o código do produto em questão, elimina o mesmo do carrinho. E por final temos a função de exibir_dados(), que gerará uma lista com o código e a quantidade de cada item armazenado no carrinho de compras, nesse caso se você utilizar um banco de dados, e quiser consultar o código do produto, para exibir o nome dele no carrinho, você pode adaptar essa função, ou desconsiderar ela, e fazer em outra página uma forma diferente de listagem, bastando acessar os componentes.

.
Script do Arquivo carrinho.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class carrinho_compra{
    function inserir_item($code,$quantidade){
        $this->codigo = $code;
        $this->qtde = $quantidade;         
        $this->dados = $_SESSION['carrinho_compras'];          
        if($this->dados != ""){
            $this->chave = array_keys($this->dados);
            $this->soff  = sizeof($this->chave);   
            for($i = 0; $i < $this->soff; $i++){
                if($this->dados[$i]['codigo'] == $this->codigo){
                    $this->dados[$i]['qtde'] += $this->qtde;                       
                    $tem = 1;
                    break;
                }
            }
            if($tem != 1){
                $this->dados[$this->soff]['codigo'] = $this->codigo;
                $this->dados[$this->soff]['qtde'] = $this->qtde;
            }
            $_SESSION['carrinho_compras'] = NULL;
            $_SESSION['carrinho_compras'] = $this->dados;
        }else{
            $this->dados[0]['codigo'] = $this->codigo;
            $this->dados[0]['qtde'] = $this->qtde;
            $_SESSION['carrinho_compras'] = NULL;
            $_SESSION['carrinho_compras'] = $this->dados;
        }
    }
    function excluir_item($code){
        $this->codigo = $code;
        $this->dados  = $_SESSION['carrinho_compras'];         
        if($this->dados != ""){
            $this->chave = array_keys($this->dados);
            $this->soff  = sizeof($this->chave);   
            for($i = 0; $i < $this->soff; $i++){
                if($this->dados[$i]['codigo'] == $this->codigo){
                    unset($this->dados[$i]);
                    $this->dados1 = array_values($this->dados);
                    $_SESSION['carrinho_compras'] = NULL;
                    $_SESSION['carrinho_compras'] = $this->dados1;
                    break;
                }
            }
        }
    }
    function exibir_dados(){
        $this->dados  = $_SESSION['carrinho_compras'];
        if ($this->dados != ""){
            $this->dados = array_reverse($this->dados);
            $this->chave = array_keys($this->dados);
            $this->soff  = sizeof($this->chave);   
            for ($i = 0; $i < $this->soff; $i++){              
                $codigo = $this->dados[$i]['codigo'];
                $quant = $this->dados[$i]['qtde'];             
                print $codigo." - ".$quant."<br />";
            }              
        }else{
            echo "Carrinho Vazio";
        }
    }
}

.
Bom, uma vez criado esse arquivo do carrinho.php, basta chamá-lo em sua página, com um require_once, e criar os objetos, mas lembre-se sempre, como esse carrinho funciona com session em PHP, você terá que sempre antes de chamar as funções do carrinho executar um session_start(). Veja o exemplo abaixo de como criar o objeto do carrinho para executá-lo posteriormente na página:

1
2
3
4
5
6
7
session_start();
require_once("carrinho.php");              

$carrinho = new carrinho_compra;   
$carrinho->dados = $_SESSION['carrinho_compras'];
$carrinho->chave = array_keys($carrinho->dados);
$carrinho->soff = sizeof($carrinho->chave);

.
Vou postar junto aqui, um script de uma outra página, que eu utilizo como sendo um atalho para execução de funções, que facilita a vida, digamos que essa página se chame produtos_carrinho.php. Essa página será onde você executará as funções automatizadas, para incluir, excluir, atualizar e limpar o carrinho. Veja abaixo o script, nesse caso você passa 3 parametros para esse script, um deles é o código do produto, outro a quantidade, e outro a ação que deverá ser executada. Dependendo da ação a ser executada, alguns dos paramentros não serão necessários. Veja abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$idproduto = $_GET['idproduto'];
$quantidade = $_GET['quantidade'];
$acao = $_GET['acao'];

if($acao == 'ADD'){
    $carrinho->inserir_item($idproduto,$quantidade);
}
if($acao == 'DEL'){
    $carrinho->excluir_item($idproduto);
}
if($acao == 'UPD' and $quantidade < 0){
    $carrinho->excluir_item($idproduto);
}
if($acao == 'UPD' and $quantidade > 0){
    $carrinho->inserir_item($idproduto,$quantidade);
}
if($acao == 'LIMPA'){
    for($i = 0; $i < $carrinho->soff; $i++){
        $idproduto = $carrinho->dados[$i]['codigo'];
        $carrinho->excluir_item($idproduto);
    }
}

.
Bom, os scripts completos deste carrinho estão disponíveis para download clicando aqui.
Nos vemos na próxima !!! Até BREVE !!!

23 de abril de 2008
Categoria(s): PHP
Faça sua parte, divulgue o Post !!
  • Twitter
  • Google Buzz
  • Digg
  • Delicious
  • Stumbleupon
  • Technorati
  • Reddit
  • Facebook
  • LinkedIn
  • E-mail
Você pode gostar de ver:
Sobre o Autor
Rodrigo Luis
Trabalho com desenvolvimento WEB há cerca de 10 anos, e com programação em PHP há cerca de 10 anos. Tenho conhecimento em diversas linguagens, mas meu domínio é especifico em PHP, JavaScript, CSS e HTML/XHTML, tenho algum conhecimento em MySQL. Além disso é claro, tenho domínio sobre ferramentas gráficas como Adobe Fireworks e Photoshop, e CorelDRAW. Sou um fã de Tecnologia de tudo que é tipo, seja relacionada a internet ou mesmo a tecnologia de hardware. Minha formação acadêmica é na área de Publicidade e Propaganda.
Exibir Pingbacks/Trackbacks
Comentários (21)
Exibir Comentários
Pingbacks/Trackbacks (0)
  • Anderson disse:

    Eaeeeeeeee…baita post eim!
    Por isso que eu falo, quem sabe faz ao vivo!

    quarta-feira, 23 de abril de 2008 às 23:06
  • E Feksa disse:

    Funciona bem! Parabéns!

    sexta-feira, 24 de julho de 2009 às 22:43
  • service desk disse:

    Show muito bom…

    domingo, 26 de julho de 2009 às 22:46
  • Márcio disse:

    Warning: array_keys() [function.array-keys]: The first argument should be an array

    o que esta mal? agradecia resposta

    terça-feira, 02 de fevereiro de 2010 às 17:13
  • Rodrigo Luis disse:

    Olá Márcio, você está fazendo a inclusão do arquivo com a classe do carrinho “require_once(“carrinho.php”);” ??

    terça-feira, 02 de fevereiro de 2010 às 19:29
  • Márcio disse:

    sim,
    require_once(“carrinho.php”);

    quinta-feira, 04 de fevereiro de 2010 às 14:39
  • Rodrigo Luis disse:

    Márcio, verifica as seguintes questões, o php da classe do carrinho de compras está na mesma pasta do script php que vc está rodando, caso não, vc terá de colocar o caminho relativo no “require_once”, outra coisa, qual a versão do PHP que vc está usando, e qual sistema operacional do servidor (win/linux) ??

    sexta-feira, 05 de fevereiro de 2010 às 8:56
  • Marcio disse:

    a pasta é a mesma.
    PHP5 linux.

    que posso fazer?

    sábado, 06 de fevereiro de 2010 às 8:40
  • Marcio disse:

    vou colar aqui o código que supostamente esta mal.
    $carrinho->chave = array_keys($carrinho->dados);

    sábado, 06 de fevereiro de 2010 às 8:45
  • 10°

    Rodrigo Luis disse:

    Márcio, pode ser que haja um erro no código quando você está copiando e colando aqui na página do webARTz, por gentileza, faça o download no link que tem no final do artigo, e utilize esse código baixado, para ver se resolve o problema.

    segunda-feira, 08 de fevereiro de 2010 às 9:58
  • 11°

    Marcio disse:

    inicialmente eu baixei o código, não copiei. depois copiei. continuou não dando.

    resolvi usar o código original no phpbrasil.
    obrigado por tudo

    segunda-feira, 08 de fevereiro de 2010 às 19:55
  • 12°

    Marcus disse:

    Como fazer para somar os valores dos produtos?

    quarta-feira, 10 de novembro de 2010 às 14:41
    • 13°

      Rodrigo Luis disse:

      Olá Marcus,

      Esse script não faz soma de valores de produtos, ele apenas armazena o ID ou código do produtos, uma vez tendo esse código, você precisa trazer o preço do seu banco de dados, e realizar uma soma dos itens do ARRAY do carrinho.

      quarta-feira, 10 de novembro de 2010 às 15:17
  • 14°

    Marcus disse:

    Sim sim, fiz tudo, peguei os preços, consegui salvar e exibir os preços, entretanto ele não fez como eu pensei, porque tipo ele ao invés de exibir os valores das arrays em um só campo, ele exibe tipo:

    Temos o produto açucar e o Produto Feijão, clico em adicionar ao carrinho 2 açucas 2 e somente 1 feijão, ele exibe assim:
    1feijão 2 açucar

    Quero que ele some estes dois valores e me dê assim: 3 Produtos, e depois, no caso, pra exibir todos os produtos, eu crio uma função para exibir detalhada.

    quarta-feira, 10 de novembro de 2010 às 15:29
    • 15°

      Rodrigo Luis disse:

      Marcus, mais simples ainda, basta você extrair do array que é o carrinho o dado “qtde” que é respectivo a quantidade, e somá-lo, ou seja ele vai te retornar a quantidade de produtos contidos no carrinho independente de quais diferentes produtos sejam.

      quarta-feira, 10 de novembro de 2010 às 16:55
  • 16°

    Marcus disse:

    Vê se eu fiz certo, pois não está funcionando:
    $conta = $this->dados['quanti']++;
    echo $conta;
    É isso ou fiz algo errado?
    Como retirar da array, não consegui de forma alguma!

    quarta-feira, 10 de novembro de 2010 às 17:32
    • 17°

      Rodrigo Luis disse:

      Marcus,

      Dentro de um FOR, você faz assim:
      $conta = $conta+$this->dados[$i]['qtde'];

      Após o FOR, você terá o $conta com a total das quantidades.

      quarta-feira, 10 de novembro de 2010 às 17:38
  • 18°

    Marcus disse:

    Ultima dúvida, só pra finalizar minha adaptação;

    Tipo, eu tenho que enviar os dados que puxei por session e tal, pro pagseguro, entretanto no hidden ele só começa a contar a partir de 1, e o $i começa do 0, como faço pra ele começar do 1?

    Abraço!

    sexta-feira, 12 de novembro de 2010 às 16:33
    • 19°

      Rodrigo Luis disse:

      Olá Marcus,

      Você colocar o input hidden do PagSeguro dentro do FOR, utiliza normal a extração do dados do $i e na hora de imprimir o campo hidden você soma +1 no nome do campo para ficar de acordo com o padrão do PagSeguro.
      Mas lembre-se de não alterar a soma no $i, senão você faz bagunça e não conseguirá fazer o loop para imprimir todos os itens do array.

      sexta-feira, 12 de novembro de 2010 às 16:41
  • 20°

    Denis disse:

    Onde tenho que colocar esse código? como criar o layout na página pra adcionar esses códigos? tenho que linkar os botões e páginas dos nomes que estão neste codigo?

    sexta-feira, 16 de dezembro de 2011 às 18:50
    • 21°

      Rodrigo Luis disse:

      Olá Denis,

      Bom, isso é um pouco mais complexo do que copiar e colar, é necessário tem um pouco de conhecimento de programação em PHP para poder implementar esse script. Veja se você consegue alguém com conhecimento de PHP próximo a você para lhe auxiliar.

      sexta-feira, 16 de dezembro de 2011 às 22:16
  • Este post não possui Pingbacks/Trackbacks

Escreva um Comentário

Blog webARTz: Onde a WEB encontra a ARTE

2008~2012 Blog webARTz // Powered by Wordpress // Hospedado na KingHost // Desenvolvido por: Agência BBD
Fechar
Voltar ao Topo
Atenção !!
Nosso blog passou por grandes mudanças e melhorias na estrutura, recursos e conteúdo.

Estas alterações podem causar dificuldade na navegação, por este motivo alguns bugs e/ou problemas podem ocorrer. Caso isso ocorra pedimos que você nos notifique pelo "Fale Conosco" aqui do blog.

No momento estamos trabalhando para o perfeito funcionamento
do blog.

Obrigado !!
Fechar
Abrir Aviso