Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carlos Eduardo_169497

Carrinho de compras php

Recommended Posts

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

    }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um Gist com 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.