Jump to content
rexmage

Problema de carrinho de compras

Recommended Posts

rexmage

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"; ?>

Share this post


Link to post
Share on other sites
MoshMage
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;

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
rexmage

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"; ?>

Share this post


Link to post
Share on other sites
HappyHippyHippo

a diferença no tempo de acesso é despresável (senão menor), em comparação com o código/processo de "partir" o ID para se poder manusear a informação necessária


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rexmage

OKapa, vou ter em conta isso que disseste em próximos projectos.

Obrigado!


<?PHP echo "Bo0m"; ?>

Share this post


Link to post
Share on other sites

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.