Carrinho de compras php
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
}Discussão (2)
Carregando comentários...