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).

MySQL Front

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).

Catálogo De Produtos

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!

Carrinho De Compras


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.

Partilha Este Artigo Por Favor:
  • Twitter
  • Facebook
  • del.icio.us
  • Digg
  • Mixx
  • Reddit
  • StumbleUpon
  • RSS

Related posts:

  1. Carrinho de Compras Personalizado Em PHP
  2. Carrinho De Compras – Pagamentos
  3. Carrinho Compras – Calcular Valor Do Frete
  4. Exportar MySQL Para XLS Com PHP
  5. Sistema De Newsletter Em PHP e MySQL

This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

21 Comentários

  1. Nuno Rodrigues

    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.

  2. Gustavo

    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. Ai vai o link:

    http://hugohenrick.blogspot.com/2010/04/video-aula-de-como-criar-um-carrinho-de.html

  3. José carlos brito

    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

  4. José carlos brito

    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

  5. 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!

  6. José Carlos Brito

    Ola Rui.
    Em relação ao á finalização das compras ainda não tem noticias para mim?
    Cumprimentos.
    Obrigado

  7. José Carlos Brito

    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.

  8. José Carlos Brito

    Desculpa rui um abraço e obrigado.

  9. Jose Brito

    Ola Rui tudo bem?
    Olha já tem novidades em relação á finalizaçao do carrinho de compras.
    Cumprimentos

  10. 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

  11. Oops! Já reparei na pasta! Desculpem!

Participa! Comenta...