Neste tutorial vou ensinar como construir um Carrinho de Compras em PHP utilizando Sessão.
A chave de tudo é um Array na Sessão do usuário, de forma que se possa manipulá-lo na hora que quiser. Os processos são apenas incluir ou retirar produtos do Carrinho.
Vejamos...
1º Passo - Crie ou altere uma base de dados MYSQL e uma tabela
Você precisará de uma tabela de produtos, crie-a com o código abaixo:
create table produto (id int(10) unsigned not null auto_increment, descricao varchar(80) not null, primary key (id))
Insira alguns dados para serem manipulados no Carrinho com este código:
insert into produto(descricao) values ('Web Cam de 3 mega pixels'),('Mouse Óptico (cor grafite com preto)'),('Monitor 19 polegadas LCD'),('Hub de 24 portas'),('Teclado Qwert sem fio preto (anti-LER)');
2º Passo - Crie "carrinho_listar.php"
Esta é a única página que será vista. Nela haverá uma consulta à base de dados criada no passo anterior que sempre irá comparar cada item trazido com o Array da Sessão. Vamos ao código:
<?php
ob_start();
session_start();
mysql_connect("host","usuario","senha");
mysql_select_db("banco-de-dados");
$sql = "select id,descricao from produto";
$query = mysql_query($sql);
?>
<form action="carrinho_adicionar_itens.php" method="post">
<ul>
<?php while($linha = mysql_fetch_array($query)){ ?>
<li>
<?php if (empty($_SESSION['carrinho'])) { ?>
<input name="id_produto[]" type="checkbox" value="<?php echo $linha['id'] ?>"> <?php echo $linha['descricao'] ?>
<?php } else { ?>
<?php if (in_array($linha['id'],$_SESSION['carrinho'])) { ?>
<input name="id_produto[]" type="checkbox" value="<?php echo $linha['id'] ?>" checked> <?php echo $linha['descricao'] ?> (<a href="carrinho_excluir_itens.php?id=<?php echo $linha['id'] ?>">retirar</a>)
<?php } else { ?>
<input name="id_produto[]" type="checkbox" value="<?php echo $linha['id'] ?>"> <?php echo $linha['descricao'] ?>
<?php } ?>
<?php } ?>
</li>
<?php } ?>
</ul>
<br />
<input type="submit" value="Adicionar item(s)" />
</form>
<!-- Diálogos com o usuário -->
<?php
if (isset($_GET['mensagem'])) {
echo "<script>alert('".$_GET['mensagem']."');</script>";
}
?>
3º Passo - Crie "carrinho_adicionar_itens.php"
Nela insira o código abaixo:
<?php
ob_start();
session_start();
//Cria array na sessão
if (!$_SESSION['carrinho'] || $_SESSION['carrinho'] == "") {
$_SESSION['carrinho'] = array();
$i = 0;
//Para cada produto vindo da listagem inclua no array
foreach($_POST['id_produto'] as $produto) {
$_SESSION['carrinho'][$i] = $produto;
$i = $i + 1;
}
//Redireciona
header("Location: carrinho_listar.php?mensagem=Carrinho criado e item(s) incluídos com sucesso!");
//Altera array na sessão
} else {
$i = 0;
//Para cada produto vindo da listagem, resgate o tamanho e inclua no array
foreach($_POST['id_produto'] as $produto) {
//Verifica item já existente
if (in_array($produto,$_SESSION['carrinho'])) {
header("Location: carrinho_listar.php?mensagem=Este item já está no carrinho!");
}
//conta chaves, inclui id
$total_chaves = array_keys($_SESSION['carrinho']);
$tamanho_array = sizeof($total_chaves);
$_SESSION['carrinho'][$i] = $produto;
$i = $i + 1;
}
//Redireciona
header("Location: carrinho_listar.php?mensagem=Item(s) incluídos com sucesso!");
}
?>
4º Passo - Crie "carrinho_excluir_itens.php"
Lá insira o código abaixo:
<?php
ob_start();
session_start();
//Altera/exclui array na sessão
$id = $_GET['id'];
$chave = array_search($id, $_SESSION['carrinho']); //localiza o valor na array
unset($_SESSION['carrinho'][$chave]); //apaga
header("Location: carrinho_listar.php?mensagem=Item(s) excluídos com sucesso!");?>
Espero que tenham gostado, até breve! ;)
sexta-feira, 29 de janeiro de 2010
745 Vizualizações
Muito bom
01/02/2010 - 21:37, Carlos Pereira | #
Henrique, parabéns pelo artigo, gostei pela linguagem clara e o conteudo auto-explicativo. abraços!
Dúvida
06/02/2010 - 20:34, Marlon | #
olá legal seu tutorial, vou precisar desenvolver um sistema de carrinho também no próximo projeto que eu vou fazer, mas e se eu criasse uma tabela temporária no banco de dados, e cada produto que o usuário clicar eu adiciono por ajax nessa tabela temporária? ai não precisaria criar arrays de sessão, funciona também se eu fizer isso? se não qual a desvantagem?
vlw amigo
abraço
Web designer há 7 anos, formado em Sistemas de Informação é atualmente analista de sistemas Outsourcing da IVIA (www.ivia.com.br) e desenvolvedor freelancer para Web. É também, de forma complementar, programador Javascript, PHP e ASP.
www.HelpMasters.com.br | Todos os direitos reservados