allanlb 0 Denunciar post Postado Julho 20, 2009 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
André D. Molin 15 Denunciar post Postado Julho 21, 2009 $_SESSION['carrinho'][$codProcuto] = ($_SESSION['carrinho'][$codProcuto] + 1); Compartilhar este post Link para o post Compartilhar em outros sites
allanlb 0 Denunciar post Postado Julho 21, 2009 $_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
Matias Rezende 50 Denunciar post Postado Julho 21, 2009 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
deatzBR 1 Denunciar post Postado Julho 21, 2009 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
allanlb 0 Denunciar post Postado Julho 21, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 21, 2009 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
allanlb 0 Denunciar post Postado Julho 22, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 23, 2009 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
David CHC 0 Denunciar post Postado Julho 23, 2009 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
allanlb 0 Denunciar post Postado Julho 27, 2009 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