rexmage Posted September 3, 2013 at 02:12 AM Report #523245 Posted September 3, 2013 at 02:12 AM (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 September 3, 2013 at 02:09 PM by brunoais geshi <?PHP echo "Bo0m"; ?>
MoshMage Posted September 3, 2013 at 06:22 AM Report #523247 Posted September 3, 2013 at 06:22 AM 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;
HappyHippyHippo Posted September 3, 2013 at 06:37 AM Report #523248 Posted September 3, 2013 at 06:37 AM 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; } 1 Report IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
rexmage Posted September 3, 2013 at 09:07 AM Author Report #523260 Posted September 3, 2013 at 09:07 AM 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"; ?>
HappyHippyHippo Posted September 3, 2013 at 09:51 AM Report #523268 Posted September 3, 2013 at 09:51 AM 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 Portugol Plus
rexmage Posted September 3, 2013 at 08:34 PM Author Report #523377 Posted September 3, 2013 at 08:34 PM OKapa, vou ter em conta isso que disseste em próximos projectos. Obrigado! <?PHP echo "Bo0m"; ?>
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now