-1
I’m testing a shopping cart... and I’m storing the cart items in the same cookie, but I am unable to detect the problem. I am recording the cart in a 2-dimensional array of 3 fixed items as value in the cookie which are: product name - quantity - price The problem is that by clicking on the same product the quantity is increased BUT when I click on another product the product that has more than 1 item purchased (type 4 items of the same product), ZERA. Doing a var_dump and looking at the cookie is happening, instead of continuing to increase the amount of the repeated product, this same product goes to another value in the array, I suspect the problem is in COUNT but I’m already on time here and can not solve, (IF YOU KEEP CLICKING REPEATEDLY ON THE PURCHASE OF THE SAME PRODUCT YOU INCREASE BUT BY CLICKING ON THE PURCHASE OF A DIFFERENT ITEM AND RETURNING TO THE REPEATED ITEM, THE REPEATED ITEM ZERA, BUT IT’S THERE in the cookie only with another input).... follows the code:
<?php
//pegamos o item adicionado ao carrinho//
$produto = $_GET['produto'];
$preco = $_GET['preco'];
////////////////////////////////////////////////////////////////
// Procedimento para inserção dos itens do carrinho //////////
if(!isset($_COOKIE['itens_carrinho'])) { //Se NÃO existe este COOKIE CRIAMOS //
//Criamos o primeiro COOKIE como primeiro ITEM do CARRINHO//
//Criamos uma array bidimensional
$itens_carrinho=[[]];
//inserimos 1 item com 3 valores na array bidimensional//
$itens_carrinho[0][0] = $produto;
$itens_carrinho[0][1] = 1;
$itens_carrinho[0][2] = $preco;
//codificamos o primeiro ITEM do carrinho//
$itens_carrinho = json_encode($itens_carrinho);
//inserimos o carrinho gravado e ENCODADO dentro do COOKIE
setcookie('itens_carrinho', $itens_carrinho, time() + 86.400 * 30);
header('Location: inserido-com-sucesso.php?produto='.$produto.'&preco='.$preco);
}
if(isset($_COOKIE['itens_carrinho'])) { //Se EXISTE este COOKIE//
if(!empty($_COOKIE['itens_carrinho'])){ //Se este cookie nao está vazio
//Pegamos o Cookie//
$itens_carrinho = $_COOKIE['itens_carrinho'];
//Decodificamos o item_carrinho de STRING para ARRAY novamente//
$itens_carrinho = json_decode($itens_carrinho);
//Verificamos quantos itens tem no carrinho//
//NOTA: O ERRO PODE ESTAR AQUI//
$itens = count($itens_carrinho); // com count o valor sempre é um a mais, pois não conta o 0//
//Nome do Produto vindo de $_GET//
$nome_do_item = $produto;
//Verificamos SE este PRODUTO já EXISTE no carrinho //NOTA: O ERRO PODE ESTAR AQUI//
for($x=0, $num_itens = $itens; $x < $num_itens; $x++){
if($itens_carrinho[$x][0] == $nome_do_item){
//SE já EXISTE este item//
//Procedimento de INCREMENTO da quantidade do item EXISTENTE - ATUALIZAÇÃO
$itens_carrinho[$x][1] = $itens_carrinho[$x][1] + 1;
$page_redirect = 'inserido-novamente-com-sucesso.php?produto='.$produto.'&preco='.$preco.'&quantidade='. $itens_carrinho[$x][1];
$existe = 'SIM';
}else{
$existe = 'NAO';
}
}
//Caso NÃO EXISTA este produto no cookie, gravamos um novo usando o COUNT, que é a última posição
if($existe == 'NAO'){
//Criamos um NOVO ITEM no ARRAY//
//NO ULTIMO PONTO//
$itens_carrinho[$itens][0] = $produto;
$itens_carrinho[$itens][1] = 1;
$itens_carrinho[$itens][2] = $preco;
//codificamos o NOVO ITEM do carrinho//
$itens_carrinho = json_encode($itens_carrinho);
//Gravamos o NOVO ITEM CODIFICADO no COOKIE
setcookie('itens_carrinho', $itens_carrinho, time() + 86.400 * 30);
//Redirecionamos para a página inserido-com-sucesso.php
header('Location:inserido-com-sucesso.php?produto='.$produto.'&preco='.$preco);
//Caso NÃO EXISTA este produto no cookie, gravamos um novamente nele com o ARRAY ATUALIZADO
}elseif($existe == 'SIM'){
//codificamos o ARRAY ATUALIZADO//
$itens_carrinho = json_encode($itens_carrinho);
//Gravamos o cookie novamente (ATUALIZAMOS ELE) com os dados ATUALIZADOS
setcookie('itens_carrinho', $itens_carrinho, time() + 86.400 * 30);
//Redirecionamos para a página de ATUALIZAÇÃO da quantidade do COOKIE
header('Location:'. $page_redirect);
}
}
}
?>
In the image below appears another page giving a var_dump in the cookie, and everyone is there but as I said when clicking on another product what has (several have added) goes to a new Info.
Hello Augusto, .
– Renan M