Palavra:   

Revista PHP / PHP

Carlos Silva

Desenvolvedor web, certificado ISPA CYCLADES e Macromedia. Desenvolvedor usando as tecnologias C#, JSP, PHP, JavaScript, XML, ABAP, Tableless e outros. Certificado em Segurança da Informação e atualmente trabalhando com ativos de Rede Cisco.

Carrinho de compras com PHP e MySQL

Olá leitores da Revista PHP,  gostaria primeiramente de agradecer aos e-mails recebidos sobre meus artigos e gostaria de aproveitar para convidar aos leitores para enviar seus artigos e contribuir para a comunidade PHP.

Bom, vamos começar criando nossas tabelas que utilizaremos no decorrer do artigo.

Iniciamos a criação da tabela de produtos, eu optei por apenas alguns campos mais por questões de exemplo para esse artigo, mas você poderá incrementar com os campos que achar melhor, exemplos comum encontrados > peso, quantidade e outros.

O campo peso é muito usado para calcular preço de transporte e quando se quer colocar um preço com frete grátis, podemos colocar o peso como zero.

OBS: No campo preço eu optei por um tipo doble (10,2)  precisão de 2 casas decimais, creio que não precisa ser modificado pois esse valor atente bem as necessidades atuais.

Criando a tabela tbl_produtos
SQL
  1. CREATE TABLE `tbl_produtos` (
  2. `cod` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `nome` VARCHAR( 150 ) NOT NULL ,
  4. `img` VARCHAR( 36 ) NOT NULL ,
  5. `preco` DOUBLE( 10, 2 ) NOT NULL
  6. ) ENGINE = MYISAM ;
www.revistaphp.com.br
OBS: Caso você optar por incluir mais campos, não se esqueça de modificar mais adiante as opções de insert e update.

Depois de criado nossa tabela, vamos popular com alguns produtos, no código abaixo mostro somente a inclusão de 2 produtos, porem faça inclusão de no mínimo  4 para melhor ficar  um visual melhor ao listar nossos produtos.

Populando a tabela tbl_produtos
SQL
  1. INSERT INTO `tbl_produtos` ( `cod` , `nome` , `img` , `preco` )
  2. VALUES (
  3. NULL , 'Notebook HP 2160br', '001.jpg', '5450'
  4. ), (
  5. NULL , 'Computador HP', '002.jpg', '1400'
  6. );
www.revistaphp.com.br
Nosso próximo passo é criarmos a tabela de carrinho de compras que será responsável em armazenar os produtos selecionados pelo visitante.

Repare ainda o campo chamado sessao, esse campo será o responsável por identificar cada pessoa no ato de carregar seu carrinho, e você pergunta.

Como isso é feito ?

Resposta: Cada visitante recebe uma sessão atual ao visitar o site,  e para  recuperar essa sessão atual utilizamos session_id(), esperimente pegar um arquivo e colocar um echo session_id() que deverá aparecer uma seqüência de caracter que é no caso nossa sessão atual.

session_id(): Retorna o id de sessão para a sessão atual ou uma string vazia ("") se não houver sessão atual (não existe um id de sessão atual).

Criando
a tabela tbl_carrinho
PHP
  1. CREATE TABLE `tbl_carrinho` (
  2. `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `cod` INT( 11 ) NOT NULL ,
  4. `nome` VARCHAR( 150 ) NOT NULL ,
  5. `preco` DOUBLE( 10, 2 ) NOT NULL ,
  6. `qtd` INT( 11 ) NOT NULL ,
  7. `sessao` TEXT NOT NULL
  8. ) ENGINE = MYISAM ;
www.revistaphp.com.br
Agora chegou a hora de criarmos nossos arquivos .php e vamos começar com nosso arquivo de conexão com banco de dados.

No início apenas definimos os valores usados para conectarmos a nossa base de dados MySQL.

mysql_connect: Abre ou reutiliza uma conexão com um servidor MySQL.

O servidor MySQL. Também pode incluir um número de porta, exemplo "servidor:porta" ou um caminho para um socket local,

exemplo ":/caminho/para/socket" para o servidor local(localhost).

Se a diretiva do PHP mysql.default_host não estiver definida(padrão), então o valor padrão é 'localhost:3306'

No meu caso como já está definido por padrão, não precisei definir a porta.

Criando
o arquivo conn.php
PHP
  1. <?php
  2. $hostname_conn = "localhost";
  3. $database_conn = "artigos";
  4. $username_conn = "username";
  5. $password_conn = "senha";
  6.  
  7. // Conectamos ao nosso servidor MySQL
  8. if(!($conn = mysql_connect($hostname_conn,$username_conn,$password_conn)))
  9. {
  10. echo "Erro ao conectar ao MySQL.";
  11. }
  12. // Selecionamos nossa base de dados MySQL
  13. if(!($con = mysql_select_db($database_conn,$conn)))
  14. {
  15. echo "Erro ao selecionar ao MySQL.";
  16. }
  17. ?>
www.revistaphp.com.br
Agora chegou a parte legal que é a listagem dos produtos na qual vamos selecionar para incluirmos no carrinho de compras.
Logo no  início eu estou definindo o charset que nosso tipo de codificação

charset=iso-8859-1

Na linha fazemos nosso include que será usado para conectarmos a nossa base de dados.

include "Connections/conn.php";

Nas linhas abaixo fazemos nosso select a qual defini selecionar somente 4 registros e chamo a função GeraColunas  passando por parâmetro o número de 2 colunas e nosso sql.

$sql = "SELECT * FROM tbl_produtos ORDER BY RAND() LIMIT 0,4";
GeraColunas(2, $sql)


Após as linhas acima fazemos nosso for para listar nossos registros e armazenamos nas variáveis onde na variável $preco eu faço a formatação usando number_format().

number_format() retorna uma versão formatada de number. Esta função aceita um, dois ou quatro parâmetros (não três):

Agora montamos nosso HTML dinâmico para listar os produtos já com as variáveis já nos devidos lugares. E para um melhor entendimento algumas linhas estão comentadas.

Criando
o arquivo produtos.php
PHP
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Carrinho de Compras</title>
  6. </head>
  7.  
  8. <body>
  9. <div align="center">
  10. <?php
  11. include "Connections/conn.php";
  12. //*********************************************************************
  13. // CONFIGURAÇÃO DE BANCO DE DADOS
  14. //*********************************************************************
  15. $con = mysql_connect($hostname_conn,$username_conn,$password_conn);
  16. $bd = mysql_select_db($database_conn);
  17. ?>
  18. <table cellSpacing=1 cellPadding=0 width="50%" align=center border=0>
  19. <tr>
  20. <td>
  21. <?
  22. //*********************************************************************
  23. // GERA A INSTRUÇÃO SQL E CHAMA A FUNÇÃO PARA GERAR AS COLUNAS
  24. //*********************************************************************
  25. $sql = "SELECT * FROM tbl_produtos ORDER BY RAND() LIMIT 0,4";
  26. GeraColunas(2, $sql)
  27. ?>
  28. </td>
  29. </tr>
  30. </table>
  31. <?
  32. //*********************************************************************
  33. // FUNÇÃO: GERACOLUNAS
  34. // Parametros:
  35. // $pNumColunas (int) > Quant. de colunas para distribuição
  36. // $pQuery (string) > Query de registros
  37. //*********************************************************************
  38. function GeraColunas($pNumColunas, $pQuery) {
  39. $resultado = mysql_query($pQuery);
  40. echo ("<table width='100%' border='0'>\n");
  41. for($i = 0; $i <= mysql_num_rows($resultado); ++$i) {
  42.  
  43. for ($intCont = 0; $intCont < $pNumColunas; $intCont++) {
  44. $linha = mysql_fetch_array($resultado);
  45. if ($i > $linha) {
  46. if ( $intCont < $pNumColunas-1) echo "</tr>\n";
  47. break;
  48. }
  49.  
  50. $cod = $linha[0];
  51. $nome = $linha[1];
  52. $img = $linha[2];
  53. $preco = number_format($linha[3],2,",",".");
  54.  
  55. if ( $intCont == 0 ) echo "<tr>\n";
  56. echo "<td>";
  57. // Aqui você inclui o conteudo
  58. echo "<table width='266' border='0' cellspacing='0' cellpadding='0'>";
  59. echo "<tr>";
  60. echo "<td width='250' height='141' valign='middle'><div align='center'><img src='produtos/".$img."' border='0' width='189' height='141' /></div></td>";
  61. echo "</tr>";
  62. echo "<tr>";
  63. echo "<td>";
  64. echo "<table width='92%' border='0' align='center' cellpadding='0' cellspacing='0'>";
  65. echo "<tr>";
  66. echo "<td><div align='center' style='font-size:10px;font-family:Verdana'><strong><a href='carrinho.php?cod=".$cod."&acao=incluir'>".$nome."</a></strong></div><strong><div align='center'><font color='#FF0000' size='4px'> R$ ".$preco." </font></strong></div></td>";
  67. echo "</tr>";
  68. echo "<tr>";
  69. echo "<td><div align='center' style='font-size:10px;font-family:Verdana'><a href='carrinho.php?cod=".$cod."&acao=incluir'><img src='imgs/add_carrinho.jpg' border='0'/></a></div><br></td>";
  70. echo "</tr>";
  71. echo "</table>";
  72. echo "</td>";
  73. echo "</tr>";
  74. echo "</table>";
  75.  
  76. // Aqui é o final do conteudo
  77. echo "</td>";
  78.  
  79. if ( $intCont == $pNumColunas-1 ) {
  80. echo "</tr>\n";
  81. } else { $i++; }
  82. }
  83.  
  84. }
  85. echo ('</table>');
  86. }
  87.  
  88. ?>
  89. </div>
  90. </body>
  91. </html>
www.revistaphp.com.br
Após algumas linhas de código, o resultado do arquivo produtos.php é a imagem abaixo, isso é porque eu defini apenas 2 colunas a serem listadas e de forma aleatória que foi definido no nosso SQL usando  RAND().


Esse arquivo principal do nosso sistema e que é nosso objetivo principal, e como no decorrer do artigo vamos usar muita session_id(), vamos relembrar mais uma vez.

session_id(): Retorna o id de sessão para a sessão atual ou uma string vazia ("") se não houver sessão atual (não existe um id de sessão atual).

Logo no inicio iniciamos nossa sessão que será de fundamental importância no carrinho, sem isso nosso carrinho não irá funcionar.

Repare que nas linhas abaixo, recuperamos os parâmetros  código do produto e a ação usada.

$acao = $_GET['acao'];
$cod =  $_GET['cod'];


A variável $acao indicará ao nosso código o que fazer, que poderá ser incluir, excluir ou modificar os dados do carrinho.

Ação incluir

Logo no começo verificamos se a $acao é igual a incluir se for incluir temos que verificar se veio algum produto para incluirmos no nosso carrinho, caso tenha algum produto, verificamos se o conteúdo da variável é numérica.

OBS: Temos que lembrar que mesmo atendendo os dois quesitos   ainda temos que verificar se esse produto já não está no carrinho e assim evitarmos incluir produtos repetidos no carrinho, porem repare que usamos a condição  abaixo.

AND tbl_carrinho.sessao = '".session_id()."'


Essa condição é para garantir que não terá um produto repetido no carrinho para uma determinada pessoa que é nosso session_id().

Podemos observar ainda que mesmo atendendo os 3 quisitos, ainda verifico se o produto que a pessoa deseja incluir existe em nossa base de dados, isso evita a pessoa mudar manualmente um código do produto na URL e se atender esse último quesito, aí sim fazemos nosso insert na base de dados.

Ação excluir

Nos 3 primeiros IF eu verifico se a ação é excluir, se for passo para verificar se existe algum conteúdo na variável $cod que é a variável do nosso produto e verificamos se é do tipo numérico.

Após fazermos as 2 verificações acima, devemos ver se o produto a ser excluido existe mesmo no nosso carrinho para a session_id() atual.

Se a variável $totalRows_rs_car for maior do que zero, é porque existe o produto a ser excluido, então excluimos o produto com o código e session_id() definido.

Ação modificar

Antes de entrar em mais detalhes devemos reparar no código HTML a linha abaixo, pois se reparar definimos um nome igual a qtd que é um array com os valores das quantidades dos produtos que iremos modificar e como esse campo  é comum a todos os produtos  então  usamos um array com os campos  chave dos produtos.

<input type"text" size="2" name="qtd[<?=$row_rs_produto_carrinho['cod']?>]" value="<?=$row_rs_produto_carrinho['qtd']?>" />


Armazenamos o conteúdo na variável $quant e verificamos se é um array e iniciamos a linha abaixo para percorrer nosso array para modificarmos as quantidades dos produtos caso os valores forem numéricos.

foreach($quant as $cod => $qtd)

Após a ação modificar simplesmente listamos os produtos do carrinho de compras referente a session_id() atual e dentro do while temos a linha abaixo que pega o preço do produto e multiplica pela quantidade desejada

$soma_carrinho += ($row_rs_produto_carrinho['preco']*$row_rs_produto_carrinho['qtd']);

Criando
o arquivo carrinho.php
PHP
  1. <?php
  2. // Iniciamos nossa sessão que vai indicar o usuário pela session_id
  3. include "Connections/conn.php";
  4. // Recuperamos os valores passados por parametros
  5. $acao = $_GET['acao'];
  6. $cod = $_GET['cod'];
  7.  
  8.  
  9. // Verificamos se a acao é igual a incluir
  10. if ($acao == "incluir")
  11. {
  12. // Verificamos se cod do produto é diferente de vazio
  13. if ($cod != '')
  14. {
  15. // Se for diferente de vazio verificamos se é numérico
  16. if (is_numeric($cod))
  17. {
  18. // Tratamos a variavel de caracteres indevidos
  19. $cod = addslashes(htmlentities($cod));
  20.  
  21. // Verificamos se o produto referente ao $cod já está no carrinho para o session id correnpondente
  22. $query_rs_carrinho = "SELECT * FROM tbl_carrinho WHERE tbl_carrinho.cod = '".$cod."' AND tbl_carrinho.sessao = '".session_id()."'";
  23. $rs_carrinho = mysql_query($query_rs_carrinho, $conn) or die(mysql_error());
  24. $row_rs_carrinho = mysql_fetch_assoc($rs_carrinho);
  25. $totalRows_rs_carrinho = mysql_num_rows($rs_carrinho);
  26.  
  27. // Se o total for igual a zero é sinal que o produto ainda não está no carrinho
  28. if ($totalRows_rs_carrinho == 0)
  29. {
  30. // Aqui pegamos os dados do produto a ser incluido no carrinho
  31. $query_rs_produto = "select * from tbl_produtos where cod = '".$cod."'";
  32. $rs_produto = mysql_query($query_rs_produto, $conn) or die(mysql_error());
  33. $row_rs_produto = mysql_fetch_assoc($rs_produto);
  34. $totalRows_rs_produto = mysql_num_rows($rs_produto);
  35.  
  36. // Se total for maior que zero esse produto existe e então podemos incluir no carrinho
  37. if ($totalRows_rs_produto > 0)
  38. {
  39. $registro_produto = mysql_fetch_assoc($rs_produto);
  40. // Incluimos o produto selecionado no carrinho de compras
  41. $add_sql = "INSERT INTO tbl_carrinho (id, cod, nome, preco, qtd, sessao)
  42. VALUES
  43. ('','".$row_rs_produto['cod']."','".$row_rs_produto['nome']."','".$row_rs_produto['preco']."','1','".session_id()."')";
  44. $rs_produto_add = mysql_query($add_sql, $conn) or die(mysql_error());
  45. }
  46. }
  47. }
  48. }
  49. }
  50.  
  51. // Verificamos se a acao é igual a excluir
  52. if ($acao == "excluir")
  53. {
  54. // Verificamos se cod do produto é diferente de vazio
  55. if ($cod != '')
  56. {
  57. // Se for diferente de vazio verificamos se é numérico
  58. if (is_numeric($cod))
  59. {
  60. // Tratamos a variavel de caracteres indevidos
  61. $cod = addslashes(htmlentities($cod));
  62. // Verificamos se o produto referente ao $cod está no carrinho para o session id correnpondente
  63. $query_rs_car = "SELECT * FROM tbl_carrinho WHERE cod = '".$cod."' AND sessao = '".session_id()."'";
  64. $rs_car = mysql_query($query_rs_car, $conn) or die(mysql_error());
  65. $row_rs_carrinho = mysql_fetch_assoc($rs_car);
  66. $totalRows_rs_car = mysql_num_rows($rs_car);
  67.  
  68. // Se encontrarmos o registro, excluimos do carrinho
  69. if ($totalRows_rs_car > 0)
  70. {
  71. $sql_carrinho_excluir = "DELETE FROM tbl_carrinho WHERE cod = '".$cod."' AND sessao = '".session_id()."'";
  72. $exec_carrinho_excluir = mysql_query($sql_carrinho_excluir, $conn) or die(mysql_error());
  73. }
  74. }
  75. }
  76. }
  77.  
  78. // Verificamos se a ação é de modificar a quantidade do produto
  79. if ($acao == "modifica")
  80. {
  81. $quant = $_POST['qtd'];
  82. // Se for diferente de vazio verificamos se é numérico
  83. if (is_array($quant))
  84. {
  85. // Aqui percorremos o nosso array
  86. foreach($quant as $cod => $qtd)
  87. {
  88. // Verificamos se os valores são do tipo numeric
  89. if(is_numeric($cod) && is_numeric($qtd))
  90. {
  91. // Fazemos nosso update nas quantidades dos produtos
  92. $sql_modifica = "UPDATE tbl_carrinho SET qtd = '$qtd' WHERE cod = '$cod' AND sessao = '".session_id()."'";
  93. $rs_modifica = mysql_query($sql_modifica, $conn) or die(mysql_error());
  94. }
  95. }
  96. }
  97.  
  98. }
  99. ?>
  100. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  101. <html xmlns="http://www.w3.org/1999/xhtml">
  102. <head>
  103. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  104. <title>Carrinho de Compras</title>
  105. <style type="text/css">
  106. <!--
  107. .style3 {font-size: 10px; font-family: Verdana, Arial, Helvetica, sans-serif; }
  108. .style4 {
  109. color: #FF0000;
  110. font-weight: bold;
  111. }
  112. -->
  113. </style>
  114. </head>
  115.  
  116. <body>
  117. <div align="center"><img src="imgs/carrinho.jpg" width="589" height="102" />
  118. </div>
  119. <form action="carrinho.php?acao=modifica" method="post">
  120. <table width="100%" border="1" cellspacing="0" cellpadding="0">
  121. <tr>
  122. <th width="36%" scope="col"><div align="left">PRODUTO</div></th>
  123. <th width="22%" scope="col">PRE&Ccedil;O</th>
  124. <th width="13%" scope="col">QUANTIDADE</th>
  125. <th width="14%" scope="col">SUBTOTAL</th>
  126. <th width="15%" scope="col">&nbsp;</th>
  127. </tr>
  128.  
  129. <?
  130. $sql_meu_carrinho = "SELECT * FROM tbl_carrinho WHERE sessao = '".session_id()."' ORDER BY nome ASC";
  131. $exec_meu_carrinho = mysql_query($sql_meu_carrinho, $conn) or die(mysql_error());
  132. $qtd_meu_carrinho = mysql_num_rows($exec_meu_carrinho);
  133.  
  134. if ($qtd_meu_carrinho > 0)
  135. {
  136. $soma_carrinho = 0;
  137. while ($row_rs_produto_carrinho = mysql_fetch_assoc($exec_meu_carrinho))
  138. {
  139. $soma_carrinho += ($row_rs_produto_carrinho['preco']*$row_rs_produto_carrinho['qtd']);
  140. ?>
  141. <tr>
  142.  
  143. <td><span class="style3">
  144. <?=$row_rs_produto_carrinho['nome']?>
  145. </span></td>
  146. <td><div align="center" class="style3"><?= number_format($row_rs_produto_carrinho['preco'],2,",","."); ?></div></td>
  147. <td><div align="center" class="style3"><input type"text" size="2" name="qtd[<?=$row_rs_produto_carrinho['cod']?>]" value="<?=$row_rs_produto_carrinho['qtd']?>" /></div></td>
  148. <td><div align="center" class="style3"><?= number_format($row_rs_produto_carrinho['preco']*$row_rs_produto_carrinho['qtd'],2,",","."); ?></div></td>
  149. <td><div align="center"><a href="carrinho.php?cod=<?=$row_rs_produto_carrinho['cod']?>&acao=excluir"><img src="imgs/del_carrinho.jpg" width="110" height="21" border="0" /></a></div></td>
  150. </tr>
  151. <?
  152. }
  153. }
  154. ?>
  155. <tr>
  156. <td colspan="3"><div align="right"><strong>TOTAL:</strong>&nbsp; </div> <div align="right"></div> <div align="right"></div></td>
  157. <td><div align="center" class="style3 style4">
  158. <?= number_format($soma_carrinho,2,",","."); ?></div></td>
  159. <td>&nbsp;</td>
  160. </tr>
  161. <tr>
  162. <td colspan="5"><table width="100%" border="0" cellspacing="0" cellpadding="0">
  163. <tr>
  164. <th width="33%" height="60" scope="col"><span class="style3"><a href="produtos.php"><img src="imgs/comprando.jpg" width="287" height="40" border="0" /></a></span></th>
  165. <th width="33%" scope="col">&nbsp;</th>
  166. <th width="34%" scope="col"><label>
  167. <input type="image" name="imageField" src="imgs/atualizar.jpg" />
  168. </label></th>
  169. </tr>
  170. </table></td>
  171. </tr>
  172. </table>
  173. </form>
  174. </body>
  175. </html>
www.revistaphp.com.br
Resultado do Carrinho após incluir 2 produtos e modificar a quantidade de um deles


Bom pessoal, espero que tenham gostado, aguardo comentários.


Abs
Carlos Silva Jr

Opções de Interação

Comentários

como encerrar a sessao?
Por: Dorival, 25/02/2011   07:32:12
Olá Carlos
O carrinho funciona certinho, adaptei a minha página, mas não consigo encerrar a sessão.
ja tentei algo do tipo:
if ($acao == "fechar"){
session_start();
session_unset();
session_destroy();
header("Location:produtos.php");
}

Mas não dá certo. Continuam os produtos alí na mesma sessão. Só tira os produtos se fechar o navegador e abrir novamente.
Se tiver uma solução ou alguem tiver, agradeço muito.
no carrinho de compras
Por: daniel, 10/11/2010   15:08:28
falta a opção finalizar pedido
ajuda muito se fizer.. att daniiii
muito util
Por: Mariana, 13/10/2010   14:54:17
esses códigos realmente abriram minha mente, eu preciso desenvolver um site de compras com php e mysql... só faltou o fechamento das compras, mas desde já,
Obrigada
Pelo script
Por: Anderson, 09/10/2010   23:31:27
Olá carlos silva, parabéns!
Gostaria de saber se teria como apagar do banco os dados após a compra, se isso é bom ou ruim?
E também, se você tiver um toturial de como implantar o carrinho com o pag seguro, eu já estudei o guia do desenvolvedor no pagseguro, mas queria ter um exemplo para poder abrir mais minha mente, seria possível?
Obrigado!
meu e-mail é anderson17ads@hotmail.com
A um pilo da perfeição
Por: Luiz, 21/09/2010   18:35:46
Carlos gostei muito mas faltou uma coisa a qual não adianta todo o trabalho.
Não temos como fazer o fechamento da compra.
Sendo com relatorio via e-mail, ou outra forma qualquer.
gostaria que você nos ajudasse em mais essa.
valeu...
Otimo
Por: marcios, 03/08/2010   18:36:56
gostei muito deste topico, mais faltou, concluir a compra, se alguem conseguiu confeccionar o restante deste artigo, mande para mim "mpstransito@bol.com.br", agradeço.
Muito Bom
Por: Fabio, 20/07/2010   15:35:03
Boa Tarde, eu nao podia ficar sem comentar esse artigo.
Está incrivel, muito bem explicado, basta ler, entender e modificar de acordo com suas necessidades.
Parabens ao Carlos e aos meus colegas que comentaram. Valeu Pienkovski, conseguir limpar o carrinho com sua dica :)
Sensacional
Por: Marcos, 07/07/2010   11:15:59
Cara muito obrigado, você me salvou, eu não fazia a mínima idéia de como implementar um carrinho de compras, e vendo o seu código conseguir criar o meu. E ainda resolvi o problema do banco de dados que muitos reclamaram, pois coloquei a data no carrinho guardando no banco, e comparo com a data atual, e se a data no carrinho for maior do que 2 ele deleta do banco de dados, pois se passaram 2 dias o usuário não vai comprar mais. E outro detalhe é o lance do get, que você esqueceu de pegá-las como $_GET que aqui não funcionou mas dependendo de como tá o php.ini funciona, mas enfim valeu mesmo...
Destruindo a session no BD
Por: Luis Carlos, 26/06/2010   21:05:20
Olá indo por esse caminho de gravar o carrinho no BD e não numa session (como arquivo), como faria pra destruir a session e excluir os dados do BD caso o usuário não finalise a compra or algum motivo?

Teria alguma sugestão?
Pontos importantes
Por: Anderson, 08/01/2010   09:17:00
Bom dia

Esse tipo de carrinho ocupar muito espaço no banco de dados porque sempre vai gravar informações no banco. Você tem alguma soluções que usa só sessão só inserir o pedido quando usuário for finalizar o carrinho