laurinha2004 Postado Julho 5, 2010 Denunciar Share Postado Julho 5, 2010 Estou montando um carrinho de compras utilizando PHP5.Aparentemente ele está funcionando, somente uma coisa está meio estranha.Se eu entrar no carrinho sem adicionar nada, ele mostra o tamanho do carrinho = 0, se eu atualizar a página, ele já coloca o tamanho = 1.Do mesmo jeito q se eu adicionar um produto, ele mostra tamanho = 1, se atualizar a página ele mostra tamanho = 2. Onde será q está o problema?Como que eu verifico na página carrinho se o tamanho do carrinho = 0? tentei acessar o método getCarrinho() da classe CarrinhoCompras mas n deu certo.Classe CarrinhoCompras<? class CarrinhoCompras { var $carrinho; function CarrinhoCompras() { session_start(); if(empty($_SESSION["carrinho"])){ $_SESSION["carrinho"] = Array(); } } function atualizarDados() { $_SESSION["carrinho"] = $this->carrinho; } function getCarrinho() { $this->carrinho = $_SESSION["carrinho"]; } function adicionarItem($midia) { $this->getCarrinho(); $codigo = $midia->getCodigo(); if (!isset($this->carrinho[$codigo])) { $this->carrinho[$codigo] = $midia; } else { /*$quantidade = $midia->getQuantidade() + $carrinho[$codigo]->getQuantidade(); $this->carrinho[$codigo]->setQuantidade($quantidade);*/ } $this->atualizarDados(); } function removerItem($midia) { $this->getCarrinho(); $codigo = $midia->getCodigo(); unset($this->carrinho[$codigo]); $this->atualizarDados(); } } ?> carrinho.php <? require_once("classes/CarrinhoCompras.php"); require_once("classes/Midia.php"); $midiaClass = new Midia(); $carrinhoComprasClass = new CarrinhoCompras(); $midia = $_GET['cod_midia']; $midiaClass->setCodigo($midia); echo "Total = ".count($_SESSION["carrinho"])." - "; $carrinhoComprasClass->adicionarItem($midiaClass); foreach($carrinhoComprasClass->carrinho as $midias) { echo $midias->getCodigo(); } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Julho 5, 2010 Denunciar Share Postado Julho 5, 2010 Laurinha,Bom Dia!Eu acho que seria o seguinte.Quanto atualiza a pagina, você está passando o valor $_GET['cod_midia'] em branco. ai ele adiciona um valor em branco no array do carrinho.Acredito que se você verificar se a variavel $midia foi definida, ou seja, se não for nula, ai sim, ela seria adicionado ao carrinho.<?php require_once("classes/CarrinhoCompras.php"); require_once("classes/Midia.php"); $midia = $_GET['cod_midia']; if(isset($media)) { $midiaClass = new Midia(); $carrinhoComprasClass = new CarrinhoCompras(); $midiaClass->setCodigo($midia); $carrinhoComprasClass->adicionarItem($midiaClass); foreach($carrinhoComprasClass->carrinho as $midias) { echo $midias->getCodigo(); } } echo "Total = ".count($_SESSION["carrinho"])." - "; ?>Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 laurinha2004 Postado Julho 5, 2010 Autor Denunciar Share Postado Julho 5, 2010 Ok Romero, funcionou perfeitamente.Agora só está c um problema....Essa linha abaixo só exibe os itens do carrinho quando eu adiciono um, ou seja, se eu entrar na página carrinho sem adicionar nenhum item, ele não exibe os que já estão lá. O q pode ser isso?foreach($carrinhoComprasClass->carrinho) as $midias){ echo $midias->getCodigo()." - "; }Outra coisa. O que posso fazer nessa classe para melhorá-la? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Julho 5, 2010 Denunciar Share Postado Julho 5, 2010 Oi Laurinha,Eu tirei o laço FOREACH do IF, assim, sempre será exibido o conteúdo do Array, e, será incluído algo, somente quando for definido a variável $midia.Mas, eu faria uma classe que implementasse um método para incluir produtos em seu carrinho, da forma que está, ficou meio modular e meio OO.Faça o teste ai,<?php require_once("classes/CarrinhoCompras.php"); require_once("classes/Midia.php"); $midia = $_GET['cod_midia']; $midiaClass = new Midia(); $carrinhoComprasClass = new CarrinhoCompras(); if(isset($media)) { $midiaClass->setCodigo($midia); $carrinhoComprasClass->adicionarItem($midiaClass); } foreach($carrinhoComprasClass->carrinho as $midias) { echo $midias->getCodigo(); } echo "Total = ".count($_SESSION["carrinho"])." - "; ?>Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 laurinha2004 Postado Julho 10, 2010 Autor Denunciar Share Postado Julho 10, 2010 O meu método para limpar o carrinho inteiro não funciona.Já tentei usar unset($_SESSION["carrinho"]), $_SESSION["carrinho"] = "", $this->carrinho = "", unset($this->carrinho), e nenhuma dessas ele encerrou a sessão. Alguém pode me dar uma luz?<? class CarrinhoComprasController { var $carrinho; function CarrinhoComprasController() { session_start(); if(empty($_SESSION["carrinho"])){ $_SESSION["carrinho"] = Array(); } } function atualizarDados() { $_SESSION["carrinho"] = $this->carrinho; } function getCarrinho() { $this->carrinho = $_SESSION["carrinho"]; } function adicionarItem($carrinhoCompras) { $this->getCarrinho(); $codigo = $carrinhoCompras->getMidia(); if (!isset($this->carrinho[$codigo])) { $this->carrinho[$codigo] = $carrinhoCompras; } $this->atualizarDados(); } function removerItem($carrinhoCompras) { $this->getCarrinho(); $codigo = $carrinhoCompras->getMidia(); unset($this->carrinho[$codigo]); $this->atualizarDados(); } function limpar() { $this->getCarrinho(); unset($this->carrinho); } } ?> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Romero Dias Postado Julho 11, 2010 Denunciar Share Postado Julho 11, 2010 Laurinha, Se você quer encerrar a sessão, utilize a função: session_destroy();. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 laurinha2004 Postado Julho 12, 2010 Autor Denunciar Share Postado Julho 12, 2010 Olá Romero, eu já tinha utilizado esse comando, mas mesmo assim a sessão continua aberta, ou seja, mostrando os produtos do carrinho.minha pagina do carrinho é a seguinte:carrinho.php<? $carrinhoComprasClass = new CarrinhoCompras(); $carrinhoComprasController = new CarrinhoComprasController(); $midia = $_GET['cod_midia']; $acao = $_GET['acao']; if($acao == "adicionar"){ $carrinhoComprasClass->setMidia($midia); $carrinhoComprasClass->setQuantidade(1); $carrinhoComprasController->adicionarItem($carrinhoComprasClass); } else if($acao == "alterar"){ $quantidade = $_GET['quantidade']; $carrinhoComprasClass->setMidia($midia); $carrinhoComprasClass->setQuantidade($quantidade); $carrinhoComprasController->alterarItem($carrinhoComprasClass); } else if($acao == "excluir"){ $carrinhoComprasClass->setMidia($midia); $carrinhoComprasController->removerItem($carrinhoComprasClass); } else if($acao == "limpar"){ $carrinhoComprasController->limpar(); } foreach($_SESSION["carrinho"] as $midiaCarrinho){ echo $midiaCarrinho->getMidia()." - "; echo $midiaCarrinho->getQuantidade()."<hr size='1'>"; } ?> <br><br> <a href="?acao=limpar">Limpar carrinho</a> CarrinhoComprasController.php ..... function limpar() { session_destroy(); } ..... Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
laurinha2004
Estou montando um carrinho de compras utilizando PHP5.
Aparentemente ele está funcionando, somente uma coisa está meio estranha.
Se eu entrar no carrinho sem adicionar nada, ele mostra o tamanho do carrinho = 0, se eu atualizar a página, ele já coloca o tamanho = 1.
Do mesmo jeito q se eu adicionar um produto, ele mostra tamanho = 1, se atualizar a página ele mostra tamanho = 2. Onde será q está o problema?
Como que eu verifico na página carrinho se o tamanho do carrinho = 0? tentei acessar o método getCarrinho() da classe CarrinhoCompras mas n deu certo.
Classe CarrinhoCompras
carrinho.phpLink para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.