Ir para conteúdo
Fórum Script Brasil
  • 0

Sessão


laurinha2004

Pergunta

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();
}
?>

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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?

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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);
    }

}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

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();
}
.....

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...