Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal, tudo bom?
Seguinte topostando um código de carrinho de compras que desenvolvi recentemente, vi que muitos desenvolvedores estão com dificuldades e a galera qui já me ajudou muito agora é minha vez de ajudar um pouco, caso façam alguma melhoria no script por favor compartilhem ^^
Vale lembrar foi usado session e cookie pra desenvolver o carrinho, a aplicação esta bem simples sem conexão com banco de dados mas implementar isso também é super simples.
<?php
//setamos onde ira aparecer o carrinho
$pagina = 'meu-carrinho.php';
session_start();
//se a sessão estiver vazia ele busca pelo cookie
if(!isset($_SESSION['carrinho'])){
$_SESSION['carrinho']= array();
$_SESSION['carrinho'] = unserialize(@$_COOKIE['carrinho']);
$cookie = unserialize($_COOKIE['carrinho']);
//se tiver algum produto com a quantidade zerada ele remove o produto do carrinho
foreach ($cookie as $prod => $value ){
if($value['product_amount'] == 0){
unset($_SESSION['carrinho']['produtos_'.$value['product_id']]);
}
}
//apaga o cookie caso exista
unset($_COOKIE['carrinho']);
//cria novo cookie com as informações atualoizadas
setcookie('carrinho', serialize($_SESSION['carrinho']), (time() + (365 * 24 * 3600)), '/', "", "", TRUE);
}
function carrinho(){
if(isset($_COOKIE['carrinho'])){
$cookie = unserialize($_COOKIE['carrinho']);
$total = 0;
if( count($cookie) > 0 ){
foreach ($cookie as $key => $value){
echo 'Codigo '.$value['product_code'].' - '.$value['product_name'].' R$ '.number_format($value['product_price'], 2, ',', '.').' - qnt '.$value['product_amount'].'<br>';
echo $value['product_options']['tamanho'].' - '.$value['product_options']['cor'].'<br>';
echo 'R$ '.$subtotal = number_format($value['product_price'] * $value['product_amount'] , 2, ',', '.').'<br>';
$total += $subtotal;
}
echo 'R$ '.number_format($total, 2, ',', '.').'<br>';
}else{
echo 'vazio';
}
}
}
//remove um produto do carrinho
if(isset($_POST['remove'])){
$cookie = unserialize($_COOKIE['carrinho']);
//percorre o carrinho procurando pelo id informado pelo 'remove'
foreach ($cookie as $prod => $value ){
if($value['product_id'] == $_POST['remove']){
$new_amount = $value['product_amount'] - 1;
//se o valor alterado for menor ou igual a zero apagamos esse produto do carrinhos
if($new_amount <= 0 ){
unset($_SESSION['carrinho']['produtos_'.$_POST['remove']]);
unset($_COOKIE['carrinho']); //apaga o cookie caso exista
setcookie('carrinho', serialize($_SESSION['carrinho']), (time() + (365 * 24 * 3600)), '/', "", "", TRUE); //cria cookie de 1 ano
//caso contrario atualizamos a sua quantidade e o restante de suas informações
}else{
if(isset($_POST['product_options'])){
$product_options = explode('&', $_POST['product_options']);
@$count = count($product_options);
if($count == 3){
$new_option_1 = explode('=', $product_options[0]);
$new_option_2 = explode('=', $product_options[1]);
$new_option_3 = explode('=', $product_options[2]);
$option = array($new_option_1[0]=>$new_option_1[1], $new_option_2[0]=>$new_option_2[1], $new_option_3[0]=>$new_option_3[1]);
}elseif ($count == 2) {
$new_option_1 = explode('=', $product_options[0]);
$new_option_2 = explode('=', $product_options[1]);
$option = array($new_option_1[0]=>$new_option_1[1], $new_option_2[0]=>$new_option_2[1]);
}elseif($count == 1){
$new_option_1 = explode('=', $product_options[0]);
$option = array($new_option_1[0]=>$new_option_1[1]);
}
$args = ['product_id'=>$_POST['remove'], 'product_code'=>$_POST['product_code'], 'product_name'=>$_POST['product_name'], 'product_amount'=>(int) $new_amount, 'product_price'=>$_POST['product_price'], 'product_options'=>$option];
}else{
$args = ['product_id'=>$_POST['remove'], 'product_code'=>$_POST['product_code'], 'product_name'=>$_POST['product_name'], 'product_amount'=>(int) $new_amount, 'product_price'=>$_POST['product_price']];
}
//cria cookie de 1 ano
unset($_COOKIE['carrinho']);
$_SESSION['carrinho']['produtos_'.$_POST['remove']] = $args;
//cria novo cookie com as informações atualizadas
setcookie('carrinho', serialize($_SESSION['carrinho']), (time() + (365 * 24 * 3600)), '/', "", "", TRUE);
}
}
}
}
//deleta um produto do carrinho
if(isset($_POST['del'])){
//apaga o indice da session informada pelo 'del'
unset($_SESSION['carrinho']['produtos_'.$_POST['del']]);
//apaga o cookie caso exista
unset($_COOKIE['carrinho']);
//cria novo cookie com as informações atualizadas
setcookie('carrinho', serialize($_SESSION['carrinho']), (time() + (365 * 24 * 3600)), '/', "", "", TRUE);
}
//adiciona um produto no carrinho
if(isset($_POST['add'])){
$cookie = unserialize($_COOKIE['carrinho']);
//verifica se existe algum produto com esse id no carrinho que esteja com
//a quantidade zerada
foreach ($cookie as $prod => $value ){
if($value['product_id'] == $_POST['add']){
//se a quantidade for = 0 ele remove o indece da session
if($value['product_amount'] == 0){
unset($_SESSION['carrinho']['produtos_'.$_POST['add']]);
}
}
}
unset($_COOKIE['carrinho']); //apaga o cookie caso exista
//atualizando o valor do produto
foreach ($_SESSION['carrinho'] as $key => $value) {
if($value['product_id'] == $_POST['add']){
$_POST['product_amount'] = $value['product_amount'] + 1;
}
}
//se for enviado algum opção variada do produto
if(isset($_POST['product_options'])){
$product_options = explode('&', $_POST['product_options']);
@$count = count($product_options);
//nesse caso achei melhor usar condições para as quantidades
//mas pode ser feito de varias maneiras se acharem uma melhor compartilhems =)
if($count == 3){
$new_option_1 = explode('=', $product_options[0]);
$new_option_2 = explode('=', $product_options[1]);
$new_option_3 = explode('=', $product_options[2]);
$option = array($new_option_1[0]=>$new_option_1[1], $new_option_2[0]=>$new_option_2[1], $new_option_3[0]=>$new_option_3[1]);
}elseif ($count == 2) {
$new_option_1 = explode('=', $product_options[0]);
$new_option_2 = explode('=', $product_options[1]);
$option = array($new_option_1[0]=>$new_option_1[1], $new_option_2[0]=>$new_option_2[1]);
}elseif($count == 1){
$new_option_1 = explode('=', $product_options[0]);
$option = array($new_option_1[0]=>$new_option_1[1]);
}
//então se tiver opções enviamos esse argumentos apelidade de args
$args = ['product_id'=>$_POST['add'], 'product_code'=>$_POST['product_code'], 'product_name'=>$_POST['product_name'], 'product_amount'=>(int) $_POST['product_amount'], 'product_price'=>$_POST['product_price'], 'product_options'=>$option];
}else{
//se não tiver enviamos esse aqui
$args = ['product_id'=>$_POST['add'], 'product_code'=>$_POST['product_code'], 'product_name'=>$_POST['product_name'], 'product_amount'=>(int) $_POST['product_amount'], 'product_price'=>$_POST['product_price']];
}
//apaga o cookie caso exista
unset($_COOKIE['carrinho']);
//cria a session com os argumentos enviados
$_SESSION['carrinho']['produtos_'.$_POST['add']] = $args;
//cria novo cookie com as informações atualizadas
setcookie('carrinho', serialize($_SESSION['carrinho']), (time() + (365 * 24 * 3600)), '/', "", "", TRUE); //cria cookie de 1 ano
}bah brow
depois de ver esse code fiquei locao aqui
vou ate fumar um pitico com os irmaos
mt bom esse code
valeu ai negao
Fiz um Gistcom um script baseado no seu mas usando uma classe...
https://gist.github.com/tadeubarbosa/d182c9336fd4271a0427
Se alguém quiser usar ou fazer alguma revisão (corrigindo os erros que tive)...
Ah! Não testei o script... Se tiver algum erro eu não sei rs.