Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
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?
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
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
Visitar Website de este utilizador Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
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 Smile

BrunoBernardino.com
Visitar Website de este utilizador Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
14-06-2011, 15:59
Mensagem: #6
RE: carrinho de compras - ajuda na correcção de alguns erros
isso para não arredondar?!
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
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 15:59)Suesana Escreveu:  isso para não arredondar?!

nao percebi?
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
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
Visitar Website de este utilizador Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 6 Visitante(s)