Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

allanlb

[Resolvido] Como alterar a quantidade de produtos do carrinho

Recommended Posts

Boa noite galera. Minha dúvida agora é de como fazer pra poder alterar a quantidade de produtos a serem postas no carrinho, e guardar na sessão e ao mesmo tempo mostrar na tela, desenvolvi uma parte, mas depois me perdi.

Tenho em mente que tenho que cada produto ter um campo pra ser digitado a quantidade do mesmo(por exemplo o nome dele ser o $codProduto que vem do banco, pra diferenciar cada post da quantidade) mas minha dúvida é na hora de multiplicar a quantidade pelo preço, ele dá um erro(Fatal error: Unsupported operand types in C:\wamp\www\site\carrinho.php on line 67

), mas meu problema nem é tanto pelo erro, mas pela lógica de como nomear os inputs, fazer a multiplicação(qual nome do input eu utilizo na multiplicação) de cada quantidade de cada input pelo preço do banco, e guardar na sessão.

 

Desde já Agradeço, segue um pedaço de código:

 

<?php   foreach ($_SESSION['carrinho'] as $codigoProduto => $qtdProduto){

$sql=mysql_query("select * from tbl_produtos where cod = $codigoProduto") or die ("erro:".mysql_error());
$lista=mysql_fetch_array($sql);
?>

<?php $total=$qtdProduto*$lista['preco'];?>		   

   <td class="produtocarrinho">
    <img src="<?php echo 'arq_imagem/'.$lista[img_princ];?>" height="40" width="40" /><?php echo $lista['nome'];?>
   </td>
   <td><div align="center" class="produtocarrinho"><?= number_format($lista['preco'],2,",","."); ?></div></td>
   <td><div align="center" class="produtocarrinho"><input type"text" size="2" name="qtd[<?=$lista['cod']?>]" value="<?=$lista['qtd']?>" /></div></td>
   <td><div align="center" class="produtocarrinho"><?= number_format($total,2,",","."); ?></div></td>
   <td><div align="center"><a href="?pag=carrinho&cod=<?=$lista['cod']?>&acao=excluir"><img src="imgs/del_carrinho.jpg" width="110" height="21" border="0" /></a></div></td>
 </tr>
   <?
 }

 ?>
   <tr>
     <td colspan="3"><div align="right"><strong>TOTAL:</strong>  </div>        <div align="right"></div>        <div align="right"></div></td>
     <td><div align="center" class="style3 style4">
     <?= number_format($soma_carrinho,2,",","."); ?></div></td>
     <td> </td>
   </tr>
   <tr>
     <td colspan="5"><table width="100%" border="0" cellspacing="0" cellpadding="0">
       <tr>
         <th width="33%" height="60" scope="col"><span class="style3"><a href="?pag=produtos&possuicarro=ok"><img src="imgs/comprando.jpg" width="287" height="40" border="0" /></a></span></th>
         <th width="33%" scope="col"> </th>
         <th width="34%" scope="col"><label>
           <input type="image" name="imageField" src="imgs/atualizar.jpg" />
		</form>
         </label></th>
       </tr>
     </table></td>
   </tr>
</table>
<br>
<div align="center">
<form action="?pag=fecharpedido" name="form2" method="post">
<input type="submit" name="Submit" value="Ver meu pedido"/></form></div>


<?  if ($_GET[acao]=='modifica'){

 	$soma = 0;

$quantidade=$_POST[qtd];
	$soma = ($lista['preco'])*($quantidade);
	}
 ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

$_SESSION['carrinho'][$codProcuto] = ($_SESSION['carrinho'][$codProcuto] + 1);

 

Tudo bem, nesse texto ele guarda na sessão, mas por que +1?

Queria que fosse digitada a quantidade de cada produto, só que tenho dúvida de como nomear cada input(como disse, provavelmente com o codProduto do banco), e depois como vou fazer pra multiplicar cada input(quantidade de produto solicitada) pelo preço de cada produto, teria que percorrer todos os inputs existentes na página e ir multiplicando cada um pelo preço de cada produto que está guardado no banco. A resposta acima acho que não foi bem o que eu precisava, mas mesmo assim foi de grande serventia.

Minha dúvida é como nomear e depois como multiplicar o preço de cada produto pelo input (quantidade de produtos) correspondente a ele(imaginei que teria que ver quais produtos o usuário selecionou, depois pegar a quantidade de cada um e multiplicar pelo seu preço quando o nome do input(codProduto(banco) for igual ao nome do input dos produtos selecionados).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para facilitar a multiplicação, você pode gravar na SESSION o valor do produto. Daí você pode usar um foreach para calcular. Eu usaria algo assim.

 

$codProduto = isset($_POST['codProduto'])? $_POST['codProduto']: '';
$qtde = isset($_POST['qtde'])? $_POST['qtde']: '';
$valor = isset($_POST['valorUnit'])? $_POST['valorUnit']: '';

if (isset($_SESSION['carrinho'][$codProduto])){
$_SESSION['carrinho'][$codProduto]['qtde'] += $qtde;
}elseif (!empty($codProduto)){
$_SESSION['carrinho'][$codProduto]['qtde'] = $qtde;
$_SESSION['carrinho'][$codProduto]['valor'] = $valor;
}
foreach($_SESSION['carrinho'] as $chave => $valor){
$total[$chave] = $_SESSION['carrinho'][$chave]['qtde'] * $_SESSION['carrinho'][$chave]['valor'];
}

 

Mais ou menos isto.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Allan,

 

Existe varias formas e logicas na hora de se criar um projeto de e-comerce, quando estava projetando a minha loja tive o mesmo problema que voce esta tendo na hora de calcular a quantidade e atualizar os valores.

Eu não acho muito pratico voce guardar a quantidade e os produtos em sessions, porque se o cliente sair da loja e voltar depois o carrinho dele vai estar vazio, eu prefiro guardar todas as informações no banco de dados, vou postar o codigo que eu estou utilizando na minha loja.

 

Este é o codigo para gerar o formulario do carrinho de compras.

<form name="form1" method="post" action="../database/loja/atualizarQuantCarrinhoDeCompras.php">
           <table cellpadding="0" cellspacing="0" class="table">
           <tr>
           <td width="285" style="padding-left:10px;"><span class="tableTit">DESCRICAO</span></td>
           <td width="40"><span class="tableTit">QUANT</span></td>
           <td width="60"><span class="tableTit">EXC</span></td>
           <td><span class="tableTit">PRECO(R$)</span></td>
           <td><span class="tableTit">TOTAL(R$)</span></td>
           </tr>

       	<?php

			//Seleciono todos os campos da tabela que armazeno os produtos e informações do cliente.
			$query = "select * from prodcliente$idCliente";
			$resultado = mysql_query($query, $conexaoPainel);
			//Checho os valores para fazer o calculo do frete.
			$numeroP = mysql_num_rows($resultado);
			if($numeroP <= 8) {
				$comprimento = 25;
				$largura = 13;
				$altura = 22;
			}
			else {
				$comprimento = 40;
				$largura = 13;
				$altura = 22;
			}
			// $inc é a variavel que eu uso para deixar todos os campos unicos, sendo assim nenhum ira se repitir
			$inc = 1;
			while($row = mysql_fetch_row($resultado)) {
				$nome = $row[0];
				$imagem = $row[1];
				$valor = $row[2];
				$valorProm = $row[3];
				$quantProd = $row[4];
				$valorTotal = $row[5];
				$pesoProd = $row[6];
				$id = $row[7];

				//Checho se o produto esta cadastrado com frete gratis.
				$queryA = "SELECT frete_gratis FROM produtos WHERE id='$id'";
				$resultadoA = mysql_query($queryA, $conexaoPainel);
				while($rowA = mysql_fetch_row($resultadoA)) {
					$freteGratis = $rowA[0];
				}

				//Faço o calculo do peso do produto.
				$queryB = "SELECT peso FROM produtos WHERE id='$id'";
				$resultadoB = mysql_query($queryB, $conexaoPainel);
				while($rowB = mysql_fetch_row($resultadoB)) {
					$peso = $rowB[0];
				}

					$pesoTotal = number_format($pesoTotal + $pesoProd,2);
       	?>
           <tr>
           <td style="padding-left:25px;">
           	<?php
				if($freteGratis == "S") {
					echo "<a href='indexProdutosIndividual.php?idProduto=$id'>";
							echo "$nome";
							echo "<span class='freteGratis'>FRETE GRATIS</span>";
					echo "</a>";
				}

				else {
					echo "<a href='indexProdutosIndividual.php?idProduto=$id'>";
							echo "$nome";
					echo "</a>";
				}
			?>

           </td>
           <td>
           	<!-- Imprimo na tela a quantidade do produto no carinho de compras do cliente, e dou o 'name' e quant$inc para deixar a quantidade de cada produto unica e poder recalcular depois. -->
               <input type='text' name='quant<?php echo $inc; ?>' class='quantidade' value='<? echo $quantProd; ?>'>
           </td>
           <td>
               <a href='../database/loja/excluirProdutoCarrinhaDeCompras.php?id=<?php echo $id; ?>'>
                   <img src='../imagens/cesta_remover.gif'>
               </a>
           </td>

           	<?php
				//Aqui eu faço uma verificação para ver se o produto esta em promoção, e imprimo os 'inputs' para recalcular novamente a quantiade e valores do produto.
				if($valorProm != "0" ) {
					echo "<td>";
						echo "<span class='right' style='padding-right:5px;'>";
							echo "R$ $valorProm";
						echo "</span>";
					echo "</td>";
					echo "<td style='background-color:#f5f5f5;'>";
						echo "<span class='right'>";
							echo "R$ $valorTotal";
						echo "</span>";
					echo "</td>";
					echo "</tr>	";
					echo "<input size='1' type='hidden' name='pesoProd$inc' value='$peso'>";
					echo "<input size='1' type='hidden' name='preco$inc' value='$valorProm'>";
					echo "<input size='1' type='hidden' name='valida$inc' value='$id' />";
				}

				else {
					echo "<td>";
						echo "<span class='right' style='padding-right:5px;'>";
							echo "R$ $valor";
						echo "</span>";
					echo "</td>";
					echo "<td style='background-color:#f5f5f5;'>";
						echo "<span class='right'>";
							echo "R$ $valorTotal";
						echo "</span>";
					echo "</td>";
					echo "</tr>";
					echo "<input size='1' type='hidden' name='peso$inc' value='$peso'>";
				   	echo " <input size='1' type='hidden' name='preco$inc' value='$valor'>";
					echo "<input size='1' type='hidden' name='valida$inc' value='$id' />";
				}
			?>

       	<?php			
				//Aumento o valor de $inc para não se repitir.
               	$inc = $inc+1;
			}

               $inc = $inc - 1;
      		?>

           <tr>
           <td colspan="3" style="padding-left:10px;">
               Você possui <b><?php echo $inc; ?></b> produto(s) no pedido.
               <br />
               Peso total do pedido : <?php echo $pesoTotal; ?> kgs.
           </td>
           <td>
               <span class="right"><b>TOTAL</b></span>
           </td>
           <td style="background-color:#e5e5e5;">
               <span class="right">R$ <?php echo $valorTotalProd; ?></span>
           </td>
           </tr>

           <tr>
           <td colspan="5" style="padding-top:20px;">
           	<span class="right">
                <a href='index.php'><img src='../imagens/continuar_comprando.png' /></a>
                   <input type="image" src="../imagens/recalcular.png" onclick="enviarForm()" />

               </span>
           </td>
           </tr>

           </table>
           <!-- Mando o numero de produtos no carrinho de compras do cliente para a pagina de atualização -->
           <input type="hidden" name="inc" value="<?php echo $inc; ?>"  />
       	</form>

 

 

Este é o arquivo que faz a atualização da quantidade dos produtos no carrinho de compras.

<?php
session_start();
// Quando o cliente faz o login eu armazeno a id dele em uma SESSION, aqui eu somente puxo ela.
$idCliente = $_SESSION["idCliente"];
?>

<?php
include "../conexaoPainel.php";

// $inc é o numero de produtos que no carrinho de compras.
$inc = $_POST["inc"];
// Crio 3 arrays para armazenar os valores e atualiza-los
$quant = array();
$valida = array();
$preco = array();
echo "<h1>$inc</h1>";

// Aqui eu rodo um looping e o uso o $inc para definir quando para-lo.
for($i = 1; $i <= $inc; $i++) {
	$quant[$i] = $_POST["quant$i"];
	$valida[$i] = $_POST["valida$i"];
	$preco[$i] = $_POST["preco$i"];
	$pesoProd[$i] = $_POST["pesoProd$i"];

	$valorTotal = number_format($quant[$i] * $preco[$i],2);
	$pesoTotal = number_format($quant[$i] * $pesoProd[$i],2);

	echo "<h1>QUANT $quant[$i]</h1>";
	echo "<h1>VALIDA $valida[$i]</h1>";
	echo "<h1>PRECO $preco[$i]</h1>";
	echo "<h1>PESO $pesoProd[$i]</h1>";
	echo "<h1>VALOR TOTAL $valorTotal</h1>";
	echo "<h1>PESO TOTAL $pesoTotal</h1>";

	echo "<hr>";

	// Agora sim aqui eu faço a atualização da quantidade e valor no banco de dados.		
	$query = "UPDATE prodcliente$idCliente SET
	quantprod='$quant[$i]',
	valortotal='$valorTotal',
	pesoprod='$pesoTotal'
	WHERE id='$valida[$i]'
	";
	mysql_query($query, $conexaoPainel) or die(mysql_error());
}



?>


 

Se voce quiser ver o codigo funcionando ele esta hospedado no site: http://www.brasilbodybuildingvideos.com.br

Qualquer duvida é so falar irmão.

 

Abraços,

 

DEATZ.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado DEATZ. Agradeço infinitamente a postagem do código, mas, por enquanto, meu carrinho de compras não necessita de login para efetuar a compra(acho um pouco inviável realizar um cadastro pra comprar algum produto, apesar de ser uma forma mais organizada, prefiro sem cadastro).Mais adiante, se a loja aumentar o tamanho, conquistar clientes fixos, posso adotar seu método. Como já mencionei, agradeço demais a ajuda, e por enquanto vou seguir o método de SESSIONS(sem banco e login), assim que conseguir o que quero, posto aqui pra vocês, caso precisem. Obrigado Galera!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, não assisti então não posso dizer se é bom ou ruim, mas é uma opção. Uma video-aula sobre como criar carrinho de compras com PHP.

Link

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Galera! Esse é o código que está gerando meu carrinho de compras, está meio bagunçado, porém falta apenas essa parte de guardar na sessão a quantidade digitada, e após clicar no botão atualizar ele calcular o total de cada linha(produto x quantidade) adicionado ao carrinho e guardar na sessão, lá no fim do código está a parte de atualizar o carrinho quando o usuário digitar aquantidade. não manjo muito de arrays por isso a dificuldade, não estou sabendo como associar cada código do produto ao seu input de quantidade, se puderem dar uma força agradeço demais, estou muito perdido. o código do produto está no array como $codigoProduto(listando normalmente os produtos inclusos no carrinho pelo usuário) e o preço de cada produto vem do banco como $lista[preco].

<?php session_start();



$idProduto = $_GET['cod']; //codigo do produto que vem por metodo get
?>

<?php 
if ($idProduto > 0 && isset($idProduto)) {
	if (!empty ($_SESSION['carrinho'])) {
			// verifica se não existe produto no carrinho	
			if (!array_key_exists($idProduto, $_SESSION['carrinho'])) {
				//se o codigo do produto nao existir no vetor ele adiciona o codigo do produto na chave e declara uma qtd de 1 produto
				$_SESSION['carrinho'][$idProduto] = 1;
			}else{
				//verifica se já existe esse produto no carrinho, se existir ele adiciona +1 de qtd do produto
				$_SESSION['carrinho'][$idProduto] += 1;
			}
	} else {
		// primeiro item a ser adicionado no carrinho
		$_SESSION['carrinho'] = array (); //a variavel sessao carrinho é um vetor agora, onde vai guardar nas posições o codigo do produto e no valor a qtd do produto
		//adiciona na chave do vetor o codigo do produto e adiciona 1 unidade
		$_SESSION['carrinho'][$idProduto] = 1;
	}
}	



//LISTA OS CODIGOS DOS PRODUTO DO CARRINHO


	//echo "Esse carrinho possui o produto de codigo:".$codigoPrdouto." e tem qtd igual a ".$qtdProduto." <br/>";
	


?>

<link rel="stylesheet" type="text/css" href="estrutura_principal.css">
<form action="?pag=carrinho&acao=modifica" method="post">
<table width="90%" border="1" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <th width="36%" scope="col" bgcolor="#0099FF" class="titulocarrinho">Produto</th>
    <th width="22%" scope="col" bgcolor="#0099FF"class="titulocarrinho">Preço</th>
    <th width="13%" scope="col" bgcolor="#0099FF"class="titulocarrinho">Quantidade</th>
    <th width="14%" scope="col" bgcolor="#0099FF"class="titulocarrinho">Subtotal</th>
    <th width="15%" scope="col" bgcolor="#0099FF"class="titulocarrinho">Ação</th>
  </tr>

 
    <tr>
  <?php   foreach ($_SESSION['carrinho'] as $codigoProduto => $qtdProduto){

 $sql=mysql_query("select * from tbl_produtos where cod = $codigoProduto") or die ("erro:".mysql_error());
$lista=mysql_fetch_array($sql);
?>

	<?php $total=$qtdProduto*$lista['preco'];?>		   
   
    <td class="produtocarrinho">
     <img src="<?php echo 'arq_imagem/'.$lista[img_princ];?>" height="40" width="40" /><?php echo $lista['nome'];?>
    </td>
    <td><div align="center" class="produtocarrinho"><?= number_format($lista['preco'],2,",","."); ?></div></td>
    <td><div align="center" class="produtocarrinho"><input type"text" size="2" name="qtd[<?=$lista['cod']?>]" value="<?=$lista['qtd']?>" /></div></td>
    <td><div align="center" class="produtocarrinho"><?= number_format($total,2,",","."); ?></div></td>
    <td><div align="center"><a href="?pag=carrinho&cod=<?=$lista['cod']?>&acao=excluir"><img src="imgs/del_carrinho.jpg" width="110" height="21" border="0" /></a></div></td>
  </tr>
    <?
  }

  ?>
    <tr>
      <td colspan="3"><div align="right"><strong>TOTAL:</strong>  </div>        <div align="right"></div>        <div align="right"></div></td>
      <td><div align="center" class="style3 style4">
      <?= number_format($soma_carrinho,2,",","."); ?></div></td>
      <td> </td>
    </tr>
    <tr>
      <td colspan="5"><table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
          <th width="33%" height="60" scope="col"><span class="style3"><a href="?pag=produtos&possuicarro=ok"><img src="imgs/comprando.jpg" width="287" height="40" border="0" /></a></span></th>
          <th width="33%" scope="col"> </th>
          <th width="34%" scope="col"><label>
            <input type="image" name="imageField" src="imgs/atualizar.jpg" />
			</form>
          </label></th>
        </tr>
      </table></td>
    </tr>
</table>
<br>
<div align="center">
<form action="?pag=fecharpedido" name="form2" method="post">
<input type="submit" name="Submit" value="Ver meu pedido"/></form></div>
<?php 

if ($_GET['acao']=='excluir'){
	
	 unset($_SESSION['carrinho'][$idProduto]);
    print "<script>window.location='?pag=carrinho';</script>";		
	  }
	  ?>
	  
	  
	 <?php  if ($_GET['acao']=='modifica'){
	
	$codProduto = isset($_GET['cod'])? $_GET['cod']: '';
$qtde = isset($_POST['qtde'])? $_POST['qtde']: '';
$valor = $lista[preco];
$total=array();

if (isset($_SESSION['carrinho'][$codigoProduto])){
        $_SESSION['carrinho'][$codigoProduto]['qtde'] += $qtde;
}elseif (!empty($codigoProduto)){
        $_SESSION['carrinho'][$codigoProduto]['qtde'] = $qtde;
        $_SESSION['carrinho'][$codigoProduto]['valor'] = $valor;
}
foreach($_SESSION['carrinho'] as $codigoProduto => $qtdProduto){
        $total = $_SESSION['carrinho'][$codigoProduto]['qtde'] * $_SESSION['carrinho'][$codigoProduto]['valor'];
		echo $total;
}
  	
	 }
	  ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha o meu post #4. Tem uma boa opção de correção do código. Tente fazer a alteração e caso haja alguma dúvida, poste-a. Mas não adianta nada postar o código completo e o que você quer que aconteça esperando que alguém faça a modificação para você.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

allanlb, você não tá conseguindo pegar a linha produto X quantidade? O Matias indicou a minha video aula, eu falo como faz isso. Vamos um exemplo, o input seu está assim:

 

<input type="text" name="qtd[$id]" value="$quantidade" />

 

Basta você percorre com foreach, assim você vai pegar o indice (o id do produto) e quantidade:

 

foreach($_POST['qtd'] as $id => $qtd){
     //aqui você faz as verificações
}

 

você já tem o id do produto e quantidade, basta fazer as verificação e atribuir isso na session, dá uma conferida na minha video aula q poderá sanar a sua duvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora deu certo, segui sua vídeo aula, funcionou direitinho! Desculpem pela postagem ali em cima, é que estava apavorado para conseguir isso, agora funcionou, apenas o total não está mostrando os "centavos", apesar de estar formatado corretamente, conforme a vídeo aula. Obrigado desde já, e desculpem pelo post ali de cima, não acontecerá mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.