Jump to content

Problema de carrinho de compras


Recommended Posts

Posted (edited)

Boas pessoal,

Surgiu-me aqui um problema e eu não estou a ver como corrigir. Precisava ai de uma ajuda vossa. Então o problema é o seguinte:

Tenho um projecto com tintas que adiciona-se quantidades de várias cores.

Cada cor, é chamado "color_IDPRODUTO_IDCOR => QUANTIDADE".

Quando chega à função, ele faz isto

 foreach ($_POST as $key => $value) {
  if($value != ''){
   if(preg_match('/color_/',$key)){
   
    $partir_key = explode('_' , $key);
   
    $produto = $partir_key[1];
    $cor = $partir_key[2];
    $quantidade = $value;
   
    //echo $produto.' - '.$cor.' - '.$quantidade.'<br/><br/>';
    add_to_carrinho($produto, $cor, $quantidade);
   }
  }
 }

Depois dentro da função add_to_carrinho

//TIPO 1 (ID, COR, QUANTIDADE)
function add_to_carrinho($produto, $cor, $quantidade) {
 $carrinho = $_SESSION["carrinho"];
 
 if( count($carrinho) == 0 ){
  array_push($_SESSION["carrinho"], $produto.'_'.$cor.'_'.$quantidade);
 }else{
 
  foreach($carrinho as $key => $valor) {
   $carrinho_idvalue    = explode("_" ,$valor);
   $carrinho_produto_id  = $carrinho_idvalue[0];    
   $carrinho_cor_id    = $carrinho_idvalue[1];    
   $carrinho_quantidade_id = $carrinho_idvalue[2];
  
  
   $todos_prods = array();
   array_push( $todos_prods, $carrinho_cor_id);
  }
 
  $todos_prods = $_SESSION["carrinho"];
 
  if( in_array($produto , $todos_prods) ){
   if($cor == $carrinho_cor_id){
    $quantidade_old = $carrinho_quantidade_id;
    $new_value = $quantidade_old + $quantidade;
   
    unset($_SESSION["carrinho"][$key]);
    array_push($_SESSION["carrinho"], $produto.'_'.$cor.'_'.$new_value);
   }else{
    array_push($_SESSION["carrinho"], $produto.'_'.$cor.'_'.$quantidade);
    //echo  $produto.'_'.$cor.'_'.$quantidade.'<br/>';
   }
  }else{
   if($carrinho_quantidade_id == $quantidade){ }else{
    array_push($_SESSION["carrinho"], $produto.'_'.$cor.'_'.$quantidade);
   }
  }
 }
}

OBJECTIVO FINAL: adicionar produtos ao carrinho com a seguinte estrutura: array(PROD_COR_QUANTIDADE);

PROBLEMA: Se for adicionar uma cor que não exista no carrinho de compras, ele funciona 100%. NO entanto se adicionar uma cor existente, ele cria uma nova cor no carrinho, mas é a mesma.

Alguma ideia ?

Tnks

Edited by brunoais
geshi

<?PHP echo "Bo0m"; ?>

Posted
ele cria uma nova cor no carrinho, mas é a mesma.

consegues-nos dar um

var_dump($produto);
var_dump($todos_prods);
var_dump($cor);
var_dump($new_value);
var_dump($quantidade);

E outro var_dump qualquer que seja necessário? É que não consegui perceber o que queres dizer com "ele cria uma nova cor no carrinho, mas é a mesma."

If all Else fails, use Else If;

Posted

no que toca à solução usada, só vou comentar que eu nunca faria desse modo.

agora, para resolver o teu problema usando o teu "modelo" :

function add_to_carrinho($produto, $cor, $quantidade) {
   $inserted = false;
   foreach ($_SESSION['carrinho'] as $key => $entrada) {
       list($eproduto, $ecor, $equantidade) = explode("_", $entrada);
       if ($eproduto == $produto && $ecor == $cor) {
           $_SESSION['carrinho'][$key] = $produto.'_'.$cor.'_'.($equantidade + $quantidade);
           $inserted = true;
       }
   }

   if (!$inserted)
       $_SESSION["carrinho"][] = $produto.'_'.$cor.'_'.$quantidade;
}
  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Posted

Resolvido HappyHippyHippo, obrigado!

Posso só perguntar-te como farias ?

pensei em usar tipo: $_SESSION['carrinho']['PROD_ID']['COR_ID']['QUANTIDADE_ID'], mas não seria mais lento o acesso ?

Obrigado de qualquer forma, resolveu o problema que tinha.

<?PHP echo "Bo0m"; ?>

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.