Carrinho De Compras Em PHP e MySQL
O sonho da maioria dos programadores é oferecer segurança e qualidade a seus clientes. Por este motivo, hoje vamos complementar nossas matérias com um assunto muito conhecido, porém, pouco especificado, já que grande parte dos Profissionais apenas “copiam e colam” este exemplo uns dos outros!
Estaremos criando um carrinho de compras feito em PHP/MySQL.
A diferença deste carrinho de compras para os já vistos na Internet é que você terá como gerenciar toda a compra através da base de dados!
Claro, é apenas um pontapé inicial para quem quer fazer sua própria loja virtual com segurança e qualidade, seguindo os 5 passos que descreveremos abaixo!
Como fazemos em todas as nossas matérias, você terá em anexo os arquivos para estudar e testar as aplicações que estamos lhe explicando.
Estrutura de pastas
Como alguns já sabem, gosto de focar meus sistemas e scripts em códigos limpos e práticos de serem gerenciados.
Por este motivo, vamos disponibilizar abaixo a estrutura de nosso conteúdo de estudo!
site
config
imagens
produtos
Criando As Tabelas Na Base De Dados
Antes de partirmos para a programação, abra o arquivo script-sql.txt (disponível no arquivo em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.
Em nossas matérias de MySQL utilizamos como padrão o MySQLFront. Caso você queira utilizar este programa, clique em SQL Editor e cole o conteúdo do script (conforme imagem abaixo).

Script De Conexão
Tendo as pastas já criadas e as tabelas na base de dados geradas, você já pode dar início à Programação!
Crie o arquivo config.php e coloque dentro da pasta config.
Neste arquivo, você deverá disponibilizar o texto abaixo:
----- config.php -----
<?
$database="localhost:3307"; // SERVIDOR E PORTA UTILIZADA
$dbname="tutorial"; // BASE DE DADOS
$usuario="root"; // USUÁRIO DO MYSQL
$dbsenha=""; // SENHA DO MYSQL
$conexao=mysql_connect ($database, $usuario, $dbsenha);
if($conexao){
if (mysql_select_db($dbname, $conexao)){ print "";
}else{ print "Não foi possível selecionar o Banco de Dados"; }
}else{ print "Erro ao conectar o MySQL"; }
?>
Definições:
Através do script acima você conseguirá conectar à base de dados MySQL.
Veja que em uma das linhas, existe um PRINT “”; (dentro dele não tem nada).
Antes de dar início ao trabalho, coloque uma informação, como: CONEXÃO OK. Se ele funcionar direitinho, retire a instrução e dê continuidade ao trabalho!
Apresentação Dos Produtos (produtos.php)
Poderíamos inserir o conteúdo do script produtos.php nesta página, porém, seria fácil de colar e difícil de entender!
Como você já tem o código todo pronto em anexo, vou apenas detalhar abaixo para que você possa entender nossa lógica de programação e aplicar às suas necessidades!
Para facilitar, peço sua gentileza de abrir este script em um programa como o PHP Editor (que é leve e tem as linhas numeradas).
----- Linha 01 à Linha 03 -----
<?php
include "config/conexao.php";
?>
Talvez esta seja a parte mais importante do código, pois se você não tiver este conteúdo em seu código, ele simplesmente não vai conectar à base de dados.
----- Linha 16 à Linha 17 -----
$sql = "SELECT * FROM tbl_produtos ORDER BY RAND() LIMIT 0,4";
GeraColunas(2, $sql)
Esta parte do código terá por finalidade selecionar os produtos na tabela (de forma randômica), limitando-os a 4 itens.
Através do GeraColunas você poderá dizer ao seu script quantas colunas você quer usar no sistema (nós usamos como base 2, mas você pode colocar 3, 4, quantos quiser.
OBS.: O conteúdo acima é apenas uma instrução, chamando a função GeraColunas.
A Função completa está descrita da linha 26 à linha 69.
Para não gerar confusão, o HTML está descrito dentro do ECHO. Caso você venha implementar este script para suas necessidades (tanto no carrinho de compras ou em outras atividades de programação), a facilidade será muito grande.
Após configurar o arquivo config.php, os Produtos cadastrados já poderão ser vistos em tela (conforme exemplo abaixo descrito na imagem).

Carrinho de Compras (carrinho.php)
A página carrinho.php é fundamental para o funcionamento de nosso script, por este motivo, cada detalhe deve ser observado com o devido cuidado.
Assim como a página produtos.php, vamos detalhar a página carrinho.php passo a passo?
----- Linha 01 à Linha 03 -----
<?php
session_start();
include "config/conexao.php";
Para os mais experientes deve ser uma tortura ler estas instruções, mas… gostaria de frizar uma coisa: Se a sessão não tiver iniciada (conforme na linha 2) e o arquivo de conexão não tiver incluso, certamente você terá sérios problemas!
Por isso, antes de tudo, observe estas duas linhas se estão preenchidas corretamente!
----- Linha 05 à Linha 06 -----
$acao = $_GET['acao'];
$cod = $_GET['cod'];
Assim como a sessão e o arquivo de conexão, estas linhas também tem importância fundamental para o funcionamento deste script!
Através delas você trás ao código a ação (que é a de incluir, alterar ou excluir) e o código do produto especificado
----- Linha 08 à Linha 13 -----
if ($acao == "incluir")
{
if ($cod != '')
{
if (is_numeric($cod))
{.
$cod = addslashes(htmlentities($cod));
Como estamos falando de segurança e praticidade, nossa intenção é levar o máximo de praticidade ao usuário final (internauta) e a segurança devida ao script!
Veja que nas linhas acima, o Sistema faz 3 verificações “básicas” antes de dar início às atividades:
- Verifica se a ação é incluir (se não for, ele já passa à próxima opção);
- Verifica se o código é diferente de vazio;
- Se ele for diferente de vazio, se é valor numérico;
- Trata as variáveis de caracteres indevidos (falaremos detalhadamente deste assunto à frente).
----- Linha 16 -----
$query_rs_carrinho = "SELECT * FROM tbl_carrinho WHERE tbl_carrinho.cod = '".$cod."' AND tbl_carrinho.sessao = '".session_id()."'";
Se você é cracker e estava lendo esta matéria até então, devia estar falando: Ah, é muito fácil entrar neste Sistema… trabalha com método GET, posso colocar a ID lá no Browser e alterar o conteúdo de compra na base de dados!
Errado… na linha 16 tomamos um cuidado especial quanto a isso…
Se o código do produto especificado não for o mesmo da sessão especificada na base de dados, o sistema não permitirá a alteração!
Esta é uma segurança que poucos programadores se preocupam em dar aos clientes que compram através da loja (até os donos de sites esquecem de ver este detalhe – em sua maioria querem apenas ver o site funcionando).
OBS.: Esta observação é válida para a ação Excluir (que vai da linha 43 à 63). Se a sessão for válida, ele permite excluir, senão, apenas o Administrador poderá fazer a exclusão posteriormente.
----- Linha 08 à Linha 13 -----
if ($acao == "alterar")
{
$quant = $_POST['qtd'];
if (is_array($quant))
{
foreach($quant as $cod => $qtd)
{
if(is_numeric($cod) && is_numeric($qtd))
{
$sql_alterar = "UPDATE tbl_carrinho SET qtd = '$qtd' WHERE cod = '$cod' AND sessao = '".session_id()."'";
$rs_alterar = mysql_query($sql_alterar);
}
}
}
}
A ação alterar também tem seus critérios!
Ela começará recebendo a quantidade (que virá através do método POST). Caso ela seja diferente de vazio, deverá verificar se o valor é numérico, percorrendo a seguir o array!
Veja que na linha 74 finalmente ele permite a alteração, sem esquecer de verificar se a sessão confere.
É super prático, não?
Bem… antes de finalizarmos, vamos dar uma olhada em como funciona o carrinho de compras (parte visual)?
----- Linha 106 -----
$sql_meu_carrinho = "SELECT * FROM tbl_carrinho WHERE sessao = '".session_id()."' ORDER BY nome ASC";
Através desta linha, o sistema fará um SELECT em cima dos produtos anteriormente selecionados!
Veja que a garantia e segurança de que estes produtos são realmente seus, será a sessão (critério principal usado neste Script).
----- Linha 110 à Linha 115 -----
if ($qtd_meu_carrinho > 0)
{
$soma_carrinho = 0;
while ($row_rs_produto_carrinho = mysql_fetch_assoc($exec_meu_carrinho))
{
$soma_carrinho += ($row_rs_produto_carrinho['preco']*$row_rs_produto_carrinho['qtd']);
Veja que do trecho acima o sistema faz algumas verificações básicas ao funcionamento do script (compare, conforme os exemplos a seguir)!
- Se a quantidade for maior que 0, ele dá andamento;
- Na linha 115 ele pega o total trazido e adiciona ao já existente.
OBS.: Observe que o que você encontra facilmente no mercado (muitas vezes feitos em JavaScript), nós fizemos em PHP + HTML. Justamente para lhe facilitar!
if (empty($cliente_username) or empty($cliente_password)) {
echo "Dados Inválidos!";
exit; }
$query = "select * from tbl_usuarios where email = '$username' and senha = '$password' AND status = '1'";
$result = mysql_query($query);
$number = mysql_num_rows($result);
if ($number==0) {?>
<script>alert('Autorização inexistente/Senha inválida ou expirada.');history.back();</script>
<? exit;
A partir daí, você pode melhorar o script, adaptando de acordo com suas necessidades.
Ficamos por aqui em mais uma matéria! Esperamos tê-lo ajudado em algo…
Envie-nos suas dúvidas e dê sugestões para as próximas matérias! Nosso compromisso é lhe ajudar!
DOWNLOAD: Descarregue o código utilizado neste tutorial para a criação dum Carrinho De Compras Em PHP E MySQL, em formato .zip.
Related posts:













Acho que se devia ter cuidado para explicar que este código é altamente vulnerável a SQL Injection.
Estive para não aprovar o teu comentário e enviei-te um email a explicar a razão. Mas, este blog é um espaço de liberdade. Por isso, aprovo.
1. Ninguém aprende a estudar o código do magento ou do oscommerce. Começa com coisas mais simples. Este blog tem tutoriais para iniciantes e para utilizadores mais avançados.
2. Olhando para o código, não está aqui o código da Amazon.com. É um tutorial sobre um carrinho de compras para iniciantes, escrito por alguém cujo currículo merece o meu crédito. E habituado a dar aulas de programação.
3. A aprendizagem tem um caminho progressivo. É como subir uma escada. Acontece degrau a degrau. Não aterramos no último degrau.
4. Ainda hoje publico um artigo mais avançado sobre como blindar código php.
O próprio Quemuel Aquino escreveu no início do tutorial: "é apenas um pontapé inicial…"
Acabei de publicar um tutorial para utilizadores mais avançados e exactamanete sobre Como Proteger O Seu Código PHP.
Ola eu vi uma video aula que desenvolve passo a passo um carrinho de compras em php e mysql
muito bom para iniciantes é feito no dreamweaver.
Olá Gustavo! Não tenho tempo para ver agora o vídeo. Tem 50 min. Vou ver durante o fim de semana e depois coloca aqui o link. Um Abraço Rui Soares
Me passa por favor
Ola Bom dia.
Parabens Rui por mais este util sistema de compras.
Estou a testar o Carrinho de compras está tudo a funcionar mas há uma coisa esquesita, não há forma de finalizar a compra?
Cumprimentos obrigado
Olá José! Obrigado. O objetivo principal do tutorial é ensinar programação. No caso concreto, o tutorial e o próprio código permite perceber como é que adicionam produtos ao cart, como é que se regressa às páginas de produtos, como é que se alteram as quantidades no cart. Posso perguntar ao Quemuel se quer dar continuidade ao tutorial e finalizar o processo de compra. Responderei nos próximos 2 dias. Um Abraço Rui Soares
Está ótimo o Script!
Basta adicionar um botão <a href="?area=finalizar_compra&cod=<?=$id;?>&acao=finalizar">Finalizar Compra
e programar na própria página carrinho.php onde tem os if ($acao == "alterar") e criar um novo if assim por exemplo:
if ($acao == "finalizar")
{
//Uso sempre esse codigo para pegar todos os valores passados pelo Post e coloca-los em variáveis
// com o mesmo nome que estavam na hora do Post
while (list($n,$v) = each($_POST))
{ $$n=$v; }
//Agora você faz como achar melhor… direcione a página para com suas devidas $vars com iden fields
// para utilizar mais tarde, ou as salve no banco de dados para depois gerar "consultas" de vendas}
//Por favor me corrija se estiver errado, sou iniciante O/
Boa tarde.
Realmente se isso fosse possivel era muito util e penso que tambem uma mais valia para o toturial.
Fico aguardar noticias.
Um abraço e bem haja a todos que se dedicam a ajudar e a disponiblizar do seu precioso tempo para transmitir alguns conhecimentos a quem quer aprender.
Obrigado
cumprimentos
Rui, muito interessante esse artigo, parabéns a você e ao Quemuel pela iniciativa, confesso que é a primeira vez que visito seu site, vou agora dar uma olhada nos seus outros artigos, pois já pude perceber que têm coisas que me interessam.
Hoje utilizo o OSCommerce para criação de lojas virtuais, porém to pensando em fazer um tipo de loja mais simples e prática, e vou dar start neste processo utilizando seus artigos.
Sem mais, parabéns!
Olá Carlos! Bem vindo ao nosso blog. Obrigado pelo seu comentário. Um Abraço Rui Soares
Ola Rui.
Em relação ao á finalização das compras ainda não tem noticias para mim?
Cumprimentos.
Obrigado
Olá José Brito! Prometo uma resposta amanhã. Um Abraço Rui Soares
José, preciso de saber o que é que pretende mesmo? Por exemplo, as despesas de envio? Um valor fixo? E em relação aos meios de pagamento? Quais? Rui Soares
Ola Rui.
Eu não quero estar a pedir a muito nem ser exigente penso que o essencial seria o ideal.
Ttipo os dados do utilizador o valor ou valores do(s) produtos"soma" do carrinho, tipos de pagamento, á cobrança e multibanco, e se for possivel as despesas de envio tb seria optimo.
Respondo então amanhã.
Olá José! Nas próximas semanas, vamos dar sequência a este tutorial. Só não prometo que seja já nos próximos dias. Na próxima semana, já deve existir mais um tutorial a dar continuidade ao carrinho de compras. Um Abraço Rui Soares
Desculpa rui um abraço e obrigado.
Ola Rui.
Obrigado fico aguardar.
Cumprimentos
Ola Rui tudo bem?
Olha já tem novidades em relação á finalizaçao do carrinho de compras.
Cumprimentos
Está muito bom,mas eu queria saber qual é o ficheiro script-sql.txt,está em algum download daqui que eu não reparei?
Obrigado,
Pedro Churro
Oops! Já reparei na pasta! Desculpem!
Olá Rui! Estive olhando em seu site os ótimos sistemas em PHP MySql, está de parabéns! Gostaria de saber se você tem um sistema de promoções em PHP MySql. Um sistema que cadastra produtos, juntamente com uma imagem, De (R$) e Por (R$) do produto. E também junto a esse sistema um Login.
Grato, Nestor!
Boa noite, gostaria de saber se vc teria alguma explicação para salvar o conteúdo do carrinho no BD e depois eu resgatar os valores para alterar posteriormente.(ex: alterar qtd, ou incluir mais produto). ninguém explica isso na net só tem milhares de formas para o carrinho. abraços
olá, poderia passar como finalizar a compra desse carrinho?
muito grata..
gostei bastante do tutorial.. foi muitoooooooo util!
Boa tarde, gostaria de saber se após o pedido aparecer no carrinho tem como colocar um botão para enviá- lo a um e-mail…. e se tem como colocar um valor fixo para taxa de entrega?
Olá Rafael,
Há essa possibilidade sim.
Me escreve e podemos tratar melhor deste assunto:
Email: comandosusa@gmail.com
Att,
Quemuel Aquino
Alguém conseguiu desenvolver o codigo pro finalizacompras.php ???
Se puder disponibilizar…. agradeço
Olá, esse carrinho é muito bom e funciona muito bem. Mas estou com um problema aparentemente facil, mas que até agora nao consegui resolver:
encerrar a sessão dele. Ja usei session_unset, já usei session_destroy, já iniciei novamente para encerrar e nada disso adianta. Só me restou recorrer ao autor ou alguem que tenha conseguido.
TEm algum segredo para encerrar a sessão? senao ele fica sempre com os mesmos produtos no carrinho.
se tiver a resposta, agradeço!
fiz uma Session de exvaziar carrinho sera que eu estou esquecendo de algo mais? esta dando erro na linha 2 nao consigod escobrir o que é???
e como faço a tela de carrinho de compra com botao atualizar, incluir utilizando os codigos??? como eu puxo eles??? nessa tela….
me add no meu msn por favor kellyhorio2010@hotmail.com
Boa noite Galera…
Peguei este script de loja e vou finalizar a parte de compra..
Devo finalizar até sexta aí é só falar uerlensantos@gmail.com
Ótimo tutorial. Estava à procura de algo que me atendesse e esse script salvou minha pátria.
olha amigo ñ tenho tanto em teresse em veder na caso mais em aprender programação e agora estou querendo aprender os segredos do php mais na net só encontrei tuto para iniciantes tem como vc me emviar linque de curssos avansados de php abrasso meu email é diegovieira-02@hotmail.com
des de ja muito. obrigado amei o tuto.
ola eu estou começando agora a programar em php e estou com um problema eu quero enviar os dados do "pedido" por Email e não estou sabendo como fazer isso alguém pode me ajudar
alias ótimo tutorial sempre me ajudam muito obrigado!!!!
ola talvez vc possa me ajudar …
pois esta dando erra na linha 5 e 6….
olá, o carrinho funciona aos 95% porém ao atualizar o mesmo para contar a qtd e atualizar o subtotal nao o faz e mostra erro nas linhas 6 e 67 quanto a variavel cod e acao, posso lhe mandar o codigo por email e verias qual é o problema?
coloca no carrrinho.php , acima de todo codigo o códgico seguinte = error_reporting(E_ALL & ~ E_NOTICE);