Jump to content
dutopfave

Carrinho de Compras PHP

Recommended Posts

Boa Tarde, estou criando uma loja virtual, e a questão é voltado para o carrinho de compras, ate agora ta tudo certo, funcionando normal, porém tem produtos que tem vários tamanho, exemplo eu tenho um tênis, e eu posso escolhe se quero tamanho 41 ou 42, blz ate ai ele registra certinho no banco, porém, se por a caso eu também queira compra o do tamanho 41, e dps volto la e compro o 42, invés de cria 2 produto no carrinho ele acaba atualizando o mesmo, pegando o ultimo tamanho q escolhi e na quantidade aumentando pra 2, vou manda o código aki, pq o ideal seria aparece 2 produto no carrinho, pq são 2 tamanho diferente, e isso ta quebrando a cabeça:

Código:

if($_GET['acao'] == 'adds'){
  $qtds = $_POST['qtds'];
  $cart_tamanho = $_POST['cart_tamanho'];

  if(!isset($_SESSION['carrinho'][$id]) && $_SESSION['carrinho'][$id] < $Verifica_qtd_row2){
      $_SESSION['carrinho'][$id] = $qtds;
      $_SESSION['cart_tamanho'][$id] = $cart_tamanho;
    }elseif($_SESSION['carrinho'][$id] < $Verifica_qtd_row2){
      $_SESSION['carrinho'][$id] += $qtds;
      $_SESSION['cart_tamanho'][$id] = $cart_tamanho;
    }else{
      $_SESSION['carrinho'][$id] = 1;
      $_SESSION['cart_tamanho'][$id] = $cart_tamanho;
  }
}

 

Share this post


Link to post
Share on other sites

Pelo o que entendi a variável $id é o id do produto.

 

Para diferenciar por tamanho pode ser feito outro índice para o tamanho do tênis

 

$_SESSION['carrinho'][$id][$tamanho] = $produto;

 

Share this post


Link to post
Share on other sites

Eu recomendo criar um array de itens no carrinho de acordo com o tipo de produto, porque se você tiver o $id repetido porque ele é o $id do tipo de produto e não do produto em si, você sempre sofrerá com essas substituições e além disso facilitará demais a "mão de obra" para incluir, alterar ou excluir item do carrinho.

 

 

 

Share this post


Link to post
Share on other sites

dutopfave,

Como você tem variações de um mesmo produto, o ID do produto sempre será igual.

 

Nesse caso, você precisará fazer dupla verificação.

Verificar se o ID já consta no carrinho, se constar e o tamanho for igual, aumenta UM na quantidade.

Se constar e o tamanho for diferente, adiciona o produto.

Se não constar, simplesmente adiciona.

 

Detalhe é que pra isso, você não pode usar o ID do produto como posição do array no carrinho.

 

1. Ou você usa índices sequenciais e atribui em cada índice as características do produto;

2. Ou se a única variação que você tiver, for tamanho, pra facilitar você pode usar "id-tam", como índice do array.

 

Segue exemplo para primeira opção:

<?php
$produtoId = 10;
$produtoTam = 41;

$existe = false;
foreach ($_SESSION['carrinho'] as $key => $carrinho) {
  // SE JA EXISTIR NO CARRINHO
  if ($carrinho['id'] === $produtoId) {
    // SE O TAMANHO FOR IGUAL, ADICIONA UM NA QUANTIDADE
    if ($carrinho['tamanho'] === $produtoTam) {
      $_SESSION['carrinho'][$key]['quantidade'] += 1;
      $existe = true;
      break;
    }
    // SE O TAMANHO FOR DIFERENTE, INSERE UMA NOVA POSICAO NO ARRAY
    else {
      $_SESSION['carrinho'][] = ['id' => $produtoId, 'tamanho' => $produtoTam, 'quantidade' => 1];
      $existe = true;
    }
  }
}

// DEPOIS DE PERCORRER TODO O CARRINHO, SE NAO EXISTIR
if (!$existe) {
  $_SESSION['carrinho'][] = ['id' => $produtoId, 'tamanho' => $produtoTam, 'quantidade' => 1];
}
?>

 

Segue exemplo para segunda opção:

<?php
$produtoId = 10;
$produtoTam = 41;

// SE EXISTIR NO CARRINHO
if (!empty($_SESSION['carrinho']["$produtoId-$produtoTam"])) {
  $_SESSION['carrinho']["$produtoId-$produtoTam"] += 1;
}
// SE NAO EXISTIR
else {
  $_SESSION['carrinho']["$produtoId-$produtoTam"] = 1;
}
?>

No caso acima, pra você pegar os produtos e os respectivos tamanhos, bastaria fazer um foreach e dar um explode('-', $array). Na posição 0 você teria o ID, na posição 1 você teria o tamanho.

 

Na minha opinião pessoal, a segunda alternativa só é mais viável, se você tiver somente essa variação no seu sistema. Do contrário, o ideal seria usar a primeira solução, visto que você poderá fazer quantas comparações quiser!

 

Um abraço!

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By jonathasouza
      Como eu poderia colocar um botão no para setar um valor na tabela do php?
      meu codigo php abaixo, eu gostaria que ele colocasse o valor onclick $nome na parte do analista da tabela via modal.
       
       
       

          <?php
      $nome = isset($_GET["nome"])? $_GET["nome"]:null;
      $matricula = isset($_GET["matricula"])? $_GET["matricula"]:null;
      $solicitacao = isset($_GET["solicitacao"])? $_GET["solicitacao"]:null;
      $prioridade = isset($_GET["prioridade"])? $_GET["prioridade"]:null;
      $orgao = isset($_GET["orgao"])? $_GET["orgao"]:null;
      $conexao = mysqli_connect('localhost', 'root', '', 'analistas');
      $query = "SELECT `solicitacao`,`prioridade`,`orgao`, `nome` from `analistas` WHERE `analistas`";
      if (mysqli_query($conexao, $query))
          { ?>
       
       
         <?php
      $conexao = mysqli_connect('localhost', 'root', '', 'analistas');
      if(mysqli_connect_errno($conexao)){
      echo 'Failed to connecto to database'.mysqli_connect_error();}

      $query= mysqli_query($conexao, "SELECT DISTINCT `solicitacao`, `prioridade`, `orgao` FROM ordem");
      ?>
                                  <?php while($rows = mysqli_fetch_array($query)): ?>
                                  <tr>
                                      <td><?php echo $rows['solicitacao']; ?></td>
                                      <td><?php echo $rows['prioridade']; ?></td>
                                      <td></td>
                                      <td></td>
                                      <td><?php echo $rows['orgao']; ?></td>
                                      <td></td>
                                      <td></td>
                                  </tr>
                                  <?php endwhile; ?>
       
       
       <!-- Modal -->
                          <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
                              <div class="modal-dialog" role="document">
                                  <div class="modal-content">
                                      <div class="modal-header">
                                          <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                                          <h4 class="modal-title" id="myModalLabel"><strong>Solicitação</strong></h4>
                                      </div>
                                      <div class="modal-body">
                                          <div class="insertHere">
                                          </div>
                                      </div>
                                      <div class="modal-footer">
                                          <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
                                          <button class="btn btn-success" data-dismiss="modal" value="Add Item" onClick="addRow('OrderTable')">Confirmar</button>
                                      </div>
                                  </div>
                              </div>
                          </div>
    • By drx
      Olá Pessoal!
       
      É possível editar meu código em php em qualquer página no WP ?
      E com relação à segurança no WP, qual procedimento devo realizar? Devo deletar algum arquivo dentro da instalação do WP?
      Desde já agradeço.
    • By Jamersonjds
      Pra aprendizado, estou tentando listar dados do banco de dados e trazer os resultados para meu html.
      Estou conseguindo fazer com este código.
       
      <!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta charset="UTF-8"> <title>Chat</title> <link rel="stylesheet" href="../public/style/reset.css"> <link rel="stylesheet" href="../public/style/chatStyle.css"> <!-- É adicionado a biblioteca jquery e o fontAwesome --> <link href="https://fonts.googleapis.com/css?family=Ubuntu&display=swap" rel="stylesheet"> <link href="../public/style/fontawesome/css/all.css" rel="stylesheet"> <script src="../public/js/jquery.min.js"></script> </head> <style> .test2 { cursor: pointer; } </style> <script> $(document).ready(function(){ var itens = "", url = "../includes/configs/chat.php", itens2 = ""; // Capturar dados usando Método AJAX do jquery $.ajax({ url: url, cache: false, dataType: "json", success: function(retorno){ for(var i = 0; i<retorno.length; i++){ itens += "<li>"; itens += "<a class='test2' onclick='function retornou(){$('.Tes22').html('wadwd')}'>"; itens += "<div class='imgUserList'>"; itens += "<div class='widthUserImg'>"; itens += "<div class='imgUserListD'><img src='https://avatars0.githubusercontent.com/u/3966553?s=460&v=4' alt=''></div>"; itens += "</div>"; itens += "<div class='textUserList'>"; itens += "<input type='text' class='pegarID' value='" + retorno[i].id + "'>"; itens += "<span class='title'>" + retorno[i].email + "</span>"; itens += "<h1 class='title'>Está online</h1>"; itens += "</div>"; itens += "</div>"; itens += "</a>"; itens += "</li>"; } $(".pessoas").html(itens); } }) }); </script> <body onload="carregarItens()"> <div class="container"> <div class="listaPessoas"> <div class="headerPeople title"> <h1>Contatos</h1> <h2 class="Tes22"></h2> </div> <ul class="pessoas"> <!-- <li> <a href=""> <div class="imgUserList"> <div class="widthUserImg"> <div class="imgUserListD"><img src="https://avatars0.githubusercontent.com/u/3966553?s=460&v=4" alt=""></div> </div> <div class="textUserList"> <span class="title">10.1.196.90</span> <h1 class="title">Está online</h1> </div> </div> </a> </li> --> </ul> </div> <div class="chat"> <div class="chatHeader"> <div class="title text"> <h1>james</h1> </div> <div class="menuUser title"> <i class="fas fa-ellipsis-h"></i> </div> </div> <div class="chatMessage"> </div> <div class="chattext"> <form action=""> <input type="text" id="modal"> <button><i class="fas fa-paper-plane"></i></button> </form> </div> </div> <div class="infoPessoas"> </div> </div> <script src="../public/js/chat.js"></script> </body> </html> Porém estou querendo pegar apenas o ID e colocar em um <h2> e não estou conseguindo.
      Exemplo: Ao clicar em um dado vindo do banco de dados como é listado acima eu colocar o ID dele no <h2>.
       
      Este é meus dados vindo do PHP já no json.
      echo json_encode($dados, JSON_PRETTY_PRINT);  
    • By jonathasouza
      Como posso criar uma query no php que não duplique varias vezes o valor?
       
      Gostaria de colocar apenas um valor desses por vez, e não a mesma coisa repetida.
       
        <?php
      $conexao = mysqli_connect('localhost', 'root', '', 'analistas');
      if(mysqli_connect_errno($conexao)){
      echo 'Failed to connecto to database'.mysqli_connect_error();}

      $query= mysqli_query($conexao, "SELECT DISTINCT * FROM tecnicos, ordem");
      ?>

    • By Rengavitp
      Boa noite pessoal, preciso ajuda com o script abaixo, ele 'e para baixar arquivos do site, ele baixa, mas o arquivo fica sempre corrompido e nao abre, (arquivos sao pdfs). Alguem pode me ajuda?
       
      <?php // Define o tempo máximo de execução em 0 para as conexões lentas set_time_limit(0); // Arqui você faz as validações e/ou pega os dados do banco de dados $aquivoNome = '62708_1.pdf'; // nome do arquivo que será enviado p/ download $arquivoLocal = '../../danfe/'.$aquivoNome; // caminho absoluto do arquivo // Verifica se o arquivo não existe if (!file_exists($arquivoLocal)) { echo "arquivo nao encontrado!"; // Exiba uma mensagem de erro caso ele não exista exit; } // Aqui você pode aumentar o contador de downloads // Definimos o novo nome do arquivo $novoNome = 'danfe.pdf'; // Configuramos os headers que serão enviados para o browser header('Content-Description: File Transfer'); header('Content-Disposition: attachment; filename="'.$novoNome.'"'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($aquivoNome)); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Expires: 0'); // Envia o arquivo para o cliente readfile($aquivoNome); ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.