Forum Pplware
carrinho de compras - ajuda na correcção de alguns erros - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: carrinho de compras - ajuda na correcção de alguns erros (/showthread.php?tid=9177)



carrinho de compras - ajuda na correcção de alguns erros - Suesana - 14-06-2011 12:16

Boas, no desenvolver de uma loja on-line, e após uma pesquisa na internet, encontrei este tutorial (http://www.videoaulasbrasil.com.br/php/carrinho-de-compras-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?


RE: carrinho de compras - ajuda na correcção de alguns erros - Bruno Bernardino - 14-06-2011 14:12

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().


RE: carrinho de compras - ajuda na correcção de alguns erros - Suesana - 14-06-2011 14:29

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


RE: carrinho de compras - ajuda na correcção de alguns erros - Bruno Bernardino - 14-06-2011 14:32

Estamos aqui para ajudar... ao ritmo das pessoas que pedem ajuda Smile


RE: carrinho de compras - ajuda na correcção de alguns erros - Canha - 14-06-2011 15:54

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


RE: carrinho de compras - ajuda na correcção de alguns erros - Suesana - 14-06-2011 15:59

isso para não arredondar?!


RE: carrinho de compras - ajuda na correcção de alguns erros - Canha - 14-06-2011 16:01

(14-06-2011 15:59)Suesana Escreveu:  isso para não arredondar?!

nao percebi?


RE: carrinho de compras - ajuda na correcção de alguns erros - Bruno Bernardino - 14-06-2011 16:08

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.


RE: carrinho de compras - ajuda na correcção de alguns erros - Suesana - 14-06-2011 16:46

eu disse aquilo porque vi uma explicação do round aqui http://www.arquivodecodigos.net/dicas/php-aprenda-a-arredondar-valores-fracionarios-usando-a-funcao-round-do-php-3161.html e lá dizem que arredonda