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

Manter os dados do carrinho


Clayton

Pergunta

Olá este é o meu carrinho de compras, funciona normalmente, porem se eu  adicionar um novo produto ou a pagina for atualizada, o preço e a quantidade volta ao inicio (1 produto), ou seja não consigo adicionar outro produto, gostaria de  manter os dados sem perde-los,ao adicionar outro produto.alguém pode me ajudar como implementar cookies neste codigo pra que os dados não se percam.  

<?php
session_start();
include(dirname(__FILE__) . './funcao/conecta.php');


if (!isset($_SESSION['shop'])) {
    $_SESSION['shop'] = array();
}

//adiciona produto

if (isset($_GET['acao']) && $_GET['acao'] == 'add' ) {
     $id = intval($_GET['id']);
     if (isset($_SESSION['shop'][$id]) || empty($_SESSION['shop'][$id])) {
         $_SESSION['shop'][$id] = 1;
     } else {
         $_SESSION['shop'][$id] += 1;
     }
 }
//subtrari produto do cesto
if (isset($_GET['acao'])) {
    if ($_GET['acao'] == 'sub') {
        $id = intval($_GET['id']);
        if (!isset($_SESSION['shop'][$id])) {
            $_SESSION['shop'][$id] = 1;
        } else {
            $_SESSION['shop'][$id] -= 1;
        }if ($_SESSION['shop'][$id] == 0) {
            unset($_SESSION['shop'][$id]);
        }
    }
}

//remove produto do cesto
if (isset($_GET['acao'])) {
    if ($_GET['acao'] == 'del') {
        $id = intval($_GET['id']);
        if (isset($_SESSION['shop'][$id])) {
            unset($_SESSION['shop'][$id]);
        }
    }
}
//altera a quantidade de produtos
//Se existir $_POST['prod'] ent�o come�a..
if (isset($_POST['atualizar'])){
    if ($_GET['acao'] == 'atualizar') {

        if (is_array($_POST['prod'])) {
            foreach ($_POST['prod'] as $id => $qtd) {
                $id = intval($id);
                $qtd = intval($qtd);
                if (!empty($qtd) || $qtd <> 0) {
                    $_SESSION['shop'][$id] = $qtd;
                } else {
                    unset($_SESSION['shop'][$id]);
                }
            }
        }
    }
}
?>
<!doctype html>
<html lang='pt-br'>
    <head>
        <meta charset = 'utf8'>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Seja Bem Vindo !</title>
        <link rel = "stylesheet" type = "text/css" href = "css/default.css">
        <body onkeydown="return (event.keyCode == 154)">
        <script src="js/jquery-2.0.0.js" type="text/javascript"></script>
        <script src="js/shop.js" type="text/javascript"></script>
        </head>
        <script>
        <script language=javascript>
        document.onkeydown = function () {
          switch (event.keyCode) {
            case 116 :
               event.returnValue = false;
               event.keyCode = 0;
               return false;
             case 82 :
               if (event.ctrlKey) {
                  event.returnValue = false;
                 event.keyCode = 0;
                 return false;
          }
        }
    }
    </script>
        </script>
        <br>
        <div align = "center"><h4>Suas compras efetuadas:</h4>
        <br>
<form action = "shop.php?acao= 'atualizar' method = "post">
<table border = "3"  color = width = "100%">
<tr>
<td width = "10%"><strong><font size="5" color="violet">FOTO</strong></font></td>
<td width = "10%"><strong><font size="5" color="violet">NOME</strong></font></td>
<td width = "10%"><strong><font size="5" color="violet">DESCRIÇÃO</strong></font></td>
<td width = "10%"><strong><font size="5" color="violet">TAMANHO</strong></font></td>
<td width = "10%"><strong><font size="5" color="violet">COR</strong></font></td>
<td width = "10%"><strong><font size="5" color="violet">PREÇO</strong></font></td>
<td width = "10%"><strong><font size="5" color="violet">QUANTIDADE</strong></font></td>
<td width = "10%"><strong><font size="5" color="violet">SUBTOTAL</strong></font></td>
<td width = "10%"><strong><font size="5" color="violet">REMOVER</strong></font></td>
</tr>
</thead>
</br>
<form  method="post" action="?acao=atualizar">
<tfoot>
<tr>
<td colspan="9"><input type="submit" size = "5" value="atualizar" /></td>
<tr>
<td colspan="9"><a href="./index.php"><strong><font size="4" color="violet">Continuar Comprando</a></td>
<tr>
<tr>
<td colspan="9"><a href="./admin/paypal.php"><strong><font size="4" color="violet"><img src="imagens/paypal.png" align="left" style="margin-right:7px;"></a></td>
</tfoot>
<tbody>


  <?php

  $total = 0;
  if(count($_SESSION['shop']) == 0){
  echo '<tr><td align = "center" colspan="9"><strong><font size="6" color="yellow">Não existem produtos em seu cesto de compras !</td></tr>';
  }else{
  $conn = conecta();
  foreach ($_SESSION['shop'] as $id => $qtd) {
                             $cart = $conn->prepare("SELECT * FROM produtos WHERE  id=$id");
                             $cart->setFetchMode(PDO::FETCH_ASSOC);
                             $cart->execute();
                             while ($linha = $cart->fetch()) {
                                   $foto = $linha['foto'];
                                   $nome = $linha['nome'];
                                   $descricao = $linha['descricao'];
                                   $tamanho = $linha['tamanho'];
                                   $cor = $linha['cor'];
                                   $preço = $linha['preço'];
                                   $linha['preço'] = str_replace(",",".",$linha['preço']);
                                   $sub = number_format($linha['preço'] * $qtd, 2, ',', '.');
                                   $total += $preço;
                                   echo '<tr>';
        echo '<td><img src = "' . $foto . ' " width = "120px"</td>';
        echo '<td><strong><font size="4" color="yellow">'.$nome.'</td>';
        echo '<td><strong><font size="4" color="yellow">'.$descricao.'</td>';
        echo '<td><strong><font size="4" color="yellow">'.$tamanho.'</td>';
        echo '<td><strong><font size="4" color="yellow">'.$cor.'</td>';
        echo' <td><strong><font size="4" color="yellow" id="preço'.$linha['id'].'">R$ ' . $preço . '</font></strong></td>';
        echo'<td><input rel="'.$linha['id'].'" type="number" step="1" min="1" style="width:50px; font-family: Tahoma; font-size: 20px;" name="prod[' . $id . ']" value="' . $qtd . '"></td>';
        echo '<td><div id="total" ><strong><font size="5" color="yellow" id="sub'.$linha['id'].'">R$ ' . $sub . '</font></strong></div></td>';
        echo '<td align = "center" colspan = "9"><a href="?acao=del&id='.$id.'"><img src="./imagens/remover.png" width="70" height="70" ></td>';
        echo '</tr>';
}
echo '<tr>';
}
}
?>

 

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Cara pra manter os dados do carrinho na session mesmo basta você fazer a variable da session['carrinho']['qtd'] += 1 se você quer ficar apenas um item ou se não colocar a variável da quantidade  session['carrinho']['qtd'] += $qtd ai sempre vai manter a quantidade e não zerar

 

OBS: session['carrinho']['qtd'] é só um exemplo da sua variavel de carrinho

Uma outra coisa que percebi foi que no seu if

 

if (isset($_SESSION['shop'][$id]) || empty($_SESSION['shop'][$id])) {
         $_SESSION['shop'][$id] = 1;
     } 

você colocou que se a variavel $_SESSION['shop']['$id'] existir ou estiver vazia você acrescenta 1, o certo seria se $_SESSION['shop']['$id'] não existir ou estiver vazia você coloca 1

 

if(!isset($_SESSION['shop']['$id']) || empty($_SESSION['shop'][$id]))
{
	$_SESSION['shop'][$id] = 1;
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

Primeiro Problema:

O if de verificação se está vazio e se existe você tem que negativar o isset porq se não sempre vai entrar ali e deixar a quantidade igual a um.

 

Segundo Problema:

você não sei se isso é uma regra sua da sua aplicação mas sempre vai ser só uma quantidade de um produto no carrinho?

Você deve deixar a quantidade pegar uma variável com a quantidade do item para você acrescentar no carrinho pois se não sempre só vai possibilitar para o usuário comprar 1 quantidade do item desejado, quando o cara for comprar tente também ter uma variável para a quantidade para acrescentar no carrinho.

 

Exemplo bem porquinho rsrs:

- Na página de compra do produto você deve ter o botão comprar e um campo com a quantidade solicitada do item.

- Ao clicar em comprar, você na hora de verificar o  $_GET['acao'] == 'add lá seu e depois acrescentar no carrinho você deve ter que passar também o campo com a quantidade do produto que como exemplo eu escrevi  session['carrinho']['qtd'(Que poderia ser $_GET['qtd'] que considero melhor passar por POST)

 

Desculpe a explicação meio doida, mas se não der pra entender eu tento explicar denovo rsrs

 

Abs,

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Eu não uso tabela ['qtd'] , qtd é uma variável ($qtd), o q acontece e que quando escolho outro produto o produto atual volta a quantidade 1, não sei se o problema está ao adicionar o produto ou no alterar a quantidade.

//Se existir $_POST['prod'] ent�o come�a..
if($_GET['acao'] == 'up'){
            if(is_array($_POST['prod'])){
               foreach($_POST['prod'] as $id => $qtd){
                  $id  = intval($id);
                  $qtd = intval($qtd);
                  if(!empty($qtd) || $qtd <> 0){
                  $_SESSION['carrinho'][$id] = $qtd;
                  }else{
                     unset($_SESSION['carrinho'][$id]);

                  }
               }
            }
         } e mudei o adicionar para: if (isset($_GET['acao']) && $_GET['acao'] == 'add' ) {
  $id = intval($_GET['id']);
           if(!isset($_SESSION['shop'][$id])){
              $_SESSION['shop'][$id] = 1;
           }else{
           }
        }

Editado por Clayton
Link para o comentário
Compartilhar em outros sites

  • 0

Cara o problema ta nesse seu if aqui:
    

if (isset($_SESSION['shop'][$id]) || empty($_SESSION['shop'][$id])) {
         $_SESSION['shop'][$id] = 1;
     } else {
         $_SESSION['shop'][$id] += 1;
     }

 

o certo seria:

if (!(isset($_SESSION['shop'][$id])) || empty($_SESSION['shop'][$id])) {
         $_SESSION['shop'][$id] = 1;
     } else {
         $_SESSION['shop'][$id] += 1;
     }

 

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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...