carrinho de compras - ajuda na correcção de alguns erros
|
14-06-2011, 12:16
Mensagem: #1
|
|||
|
|||
carrinho de compras - ajuda na correcção de alguns erros
Boas, no desenvolver de uma loja on-line, e após uma pesquisa na internet, encontrei este tutorial (http://www.videoaulasbrasil.com.br/php/c...s-com-php/) de onde explica a parte de adicionar produtos ao carrinho de compras e visualização do carrinho de compras.
Tenho então a página onde aparecem os produtos (categoria1.php) e tem: <?php echo ' <a href="carrinho.php?acao=add&id='.$linha['id'].'"> <img src="../imagens/comprar.jpg" /></a>'; ?> e depois tenho a página carrinho.php com o seguinte código: <?php session_start(); if(!isset($_SESSION['carrinho'])){ $_SESSION['carrinho'] = array(); } // Adiciona produto if(isset($_GET['acao'])){ //Adicionar carrinho if($_GET['acao'] == 'add'){ $id = intval ($_GET['id']); if(!isset($_SESSION['carrinho'][$id])){ $_SESSION['carrinho'][$id] = 1; }else{ $_SESSION['carrinho'][$id] += 1; } } //Remover carrinho if($_GET['acao'] == 'del'){ $id = intval ($_GET['id']); if(isset($_SESSION['carrinho'][$id])){ unset($_SESSION['carrinho'][$id]); } } //alterar quantidade 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]); } } } } } ?> <?php include ("verifica.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php include "../admin/ligacao.php"; ?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <style type="text/css"> <!-- @import url(../css.css); --> </style> </head> <body> <div id="conteudo"> <b class="titulo">Carrinho de Compras</b> <div id="texto"> <table border="0px" style="text-align:center"> <tr><td colspan="6" style="text-align:right"><a href="categoria1.php" class="formulario" style="text-decoration:none;"> Continuar as compras </a></td></tr> <tr height="5px"></tr> <tr></tr> <tr> <td width="200"><b>Nome do Produto</b></td> <td width="80"><b>Imagem</b></td> <td width="79"><b>Quantidade</b></td> <td width="75"><b>Preço</b></td> <td width="90"><b>Subtotal</b></td> <td width="64"><b>Acções</b></td> </tr> <form action="?acao=up" method="post"> <?php if (count($_SESSION['carrinho'])== 0){ echo '<tr> <td colspan="5"> Não há produtos no carrinho </td></tr>'; }else{ foreach ($_SESSION['carrinho'] as $id => $qtd){ $sql = "SELECT * FROM produtos WHERE id= '$id'"; $sql = mysql_query($sql) or die (mysql_error()); $linha = mysql_fetch_assoc($sql); $nome_produto = $linha['nome_produto']; $imagem = $linha['imagem']; $preco = number_format ($linha ['preco'], 2, ',', ''); $sub = number_format ($linha ['preco'] * $qtd, 2, ',', ''); $total += $sub; echo '<tr> <td> '.$nome_produto.' </td> <td><img src="../imagens/'.$imagem.'" style="max-width:60px; max-height:60px;" border="0px" /> </td> <td> <input type="text" size="3" name="prod['.$id.']" value="'.$qtd.'" style="text-align:center"/> </td> <td> '.$preco.' €</td> <td> '.$sub.' € </td> <td> <a href="?acao=del&id='.$id.'"><span class="formulario"> Apagar</span> </a> </td> </tr>'; } $total = number_format ($total, 2, ',', ''); echo '<tr></tr><tr> <td colspan ="3"></td> <td><b>Total</</td> <td> '.$total.' € </td> </tr><tr></tr>'; } ?> <tr> <td colspan="4"></td> <td colspan="2"><input type="submit" value="Actualizar Encomenda" class="formulario" style="text-align:right" /></td> </tr> <tr> </tr> <tr> <td colspan="4"></td> <td colspan="2"> <a href="finalizar_encomenda.php"><span class="formulario">Finalizar a encomenda</span></a></td> </tr> <tr height="15px"></tr> </form> </table> mas acontecem alguns problemas: • Após adicionar um produto ao carrinho de compras se carregar F5 ele aumenta uma unidade ao último produto inserido • Não esta a fazer o total bem (se tiver 8.50 ele totaliza 8€) É possível alaguem me ajudar sff? |
|||
14-06-2011, 14:12
Mensagem: #2
|
|||
|
|||
RE: carrinho de compras - ajuda na correcção de alguns erros
Podia-te sugerir utilizar AJAX para adicionar os itens ao carrinho, mas estás a utilizar tabelas para layout, html dentro de variáveis (sem ob_start(), etc.), e muitas outras coisas que com o tempo verás que são péssimas, por isso deduzo que seria algo que não te interessaria para já, visto que terias de alterar basicamente tudo.
Dentro do que tu tens, as soluções mais "rápidas": 1. Quando adicionas o produto, antes de fazeres output de HTML, fazes um redireccionamento para a página, sem variáveis no URL, assim ao fazer refresh não adiciona nada. 2. Utiliza o round() com duas casas decimais enquanto fazes cálculos, só no final é que deves aplicar o number_format(). BrunoBernardino.com |
|||
14-06-2011, 14:29
(Esta mensagem foi modificada pela última vez a: 14-06-2011 14:34 por Suesana.)
Mensagem: #3
|
|||
|
|||
RE: carrinho de compras - ajuda na correcção de alguns erros
muito obrigada pela ajuda, de facto tenho vindo a observar que este fórum é bom por 1 coisa: tipo noutros fórum ja me estavam a insultar a dizer que não percebia nada, muito obrigada por toda a ajuda prestada.
pelo que vi sobre o round() arredonda, tipo se tiver 7,5 coloca 8, mas isso ele já está a fazer eu queria era que n fizessem iso, porque se o produto custa 8.50€ como está, o total aparece 8€ e assim a loja ficaria a perder |
|||
14-06-2011, 14:32
Mensagem: #4
|
|||
|
|||
RE: carrinho de compras - ajuda na correcção de alguns erros
Estamos aqui para ajudar... ao ritmo das pessoas que pedem ajuda
BrunoBernardino.com |
|||
14-06-2011, 15:54
Mensagem: #5
|
|||
|
|||
RE: carrinho de compras - ajuda na correcção de alguns erros
Boas
acho que se utilizares qualquer coisa assim parecida é possivel resolver o teu problema. Tipo, tens que introduzir o header e no nome da página que incrementa o valor. if ( isset($_GET['comprar']) ) { $_SESSION['ultimo']=$_GET['comprar']; header("Location: carrinho.php"); } cumps |
|||
14-06-2011, 15:59
Mensagem: #6
|
|||
|
|||
RE: carrinho de compras - ajuda na correcção de alguns erros
isso para não arredondar?!
|
|||
14-06-2011, 16:01
(Esta mensagem foi modificada pela última vez a: 14-06-2011 16:02 por Canha.)
Mensagem: #7
|
|||
|
|||
RE: carrinho de compras - ajuda na correcção de alguns erros | |||
14-06-2011, 16:08
Mensagem: #8
|
|||
|
|||
RE: carrinho de compras - ajuda na correcção de alguns erros
Não Suesana, o round() recebe um parâmetro que é o número de casas decimais a arredondar. Lê o que eu disse outra vez. O que o Canha disse foi para fazer o redirect.
BrunoBernardino.com |
|||
14-06-2011, 16:46
Mensagem: #9
|
|||
|
|||
RE: carrinho de compras - ajuda na correcção de alguns erros
eu disse aquilo porque vi uma explicação do round aqui http://www.arquivodecodigos.net/dicas/ph...-3161.html e lá dizem que arredonda
|
|||
« Mais Antigo | Mais Recente »
|
Utilizadores a ver este tópico: 1 Visitante(s)