Ir para conteúdo

POWERED BY:

Arquivado

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

click01

[Resolvido] Adiciona 2 produtos iguais ao carrinho

Recommended Posts

ola... no meu carrinho de compras, quando clico 2 vezes no mesmo produto, ele adiciona 2 produtos iguais ao carrinho em vez de alterar o numero para 2, alguem me sabe dizer como coloco um "if" que faça o script entender que caso ja exista esse produto no carrinho, altere a quantidade para +1 ?!??!

 

 

index.php (ficheiro que exibe os produtos)

 

<?
session_start();
include('conexao.php');
?>

<html>
<body>

<?
// Faz o pedido à base de dados.
$produtos = mysql_query('SELECT * FROM produtos ORDER BY RAND()', $con);
while($produto = mysql_fetch_assoc($produtos)){
echo '<div>';

// Mostra a imagem e nome do produto.
echo '<br><img width=120 height=90 border=0 src="Imagens/'.$produto['img'].'"><br><b>'.$produto['nome'].'</b><br>';

// Mostra o preço.
echo '€ '.number_format($produto['preco'], 2, ',', '').'<br>';

// Mostra o link pra adicionar ao carrinho.
echo '<a href="carrinho.php?produto='.$produto['id'].'">Adicionar ao Carrinho</a><br><br>';
echo '<a href="verProdutos.php">Ver Carrinho</a></div>';
}
?>

</body>
</html>

 

 

 

verProdutos.php (ficheiro que mostra os produtos adicionados ao carrinho)

 

<?
session_start();
include('conexao.php');

// Obtendo a id da sessão
$sessao = session_id();
?>

<html>
<body>
<form action='atualiza.php' method='post'>

<?
// Requisita à base de dados a id, quantidade e nome do produto.
// Como o nome está numa tabela diferente dos outros itens, incluo o nome da tabela junto ao nome do campo.
$itens = mysql_query('SELECT carrinho.cod, carrinho.quant, produtos.nome, produtos.img, produtos.preco FROM carrinho,produtos
WHERE carrinho.cod = produtos.id AND carrinho.sessao = "'.$sessao.'"');

// Uma verificação simples se o carrinho está vazio ou não
if(mysql_num_rows($itens) < 1){

// Se o carrinho estiver vazio só exibe uma mensagem e um link para a loja
echo "Carrinho Vazio!<br><br><a href='index.php'>Ir para a loja</a>";

} else {

// Exibe os itens presentes no carrinho
?>

<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='500'>

<?
// Calcular o preço total
$total = 0;

// Dou um loop pra listar is itens do carrinho de compras
while($item = mysql_fetch_assoc($itens)){
?>

<tr valign="middle">
<td bgcolor="#e3e3e3" width="40" align="left" valign="middle">
<b><a href="detalhes.php?id=<? echo $item['cod'] ?>"><? echo '<img width=40 height=30 border=0 src="Imagens/'.$item['img'].'">' ?></a></b>
</td>
<td bgcolor="#e3e3e3" width="300" align="left" valign="middle">
<b><a href="detalhes.php?id=<? echo $item['cod'] ?>"><? echo $item['nome'] ?></a></b>
</td>
<td bgcolor="#eeeeee" width="100">
<center>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>
</td>
<td bgcolor="#e3e3e3" width="50">
<center>
<input size='4' type='text' name='quantidade[<? echo $item["cod"] ?>]' value='<? echo $item["quant"] ?>'>
</td>
<td bgcolor="#eeeeee" width="50">
<center>
<a href='remover.php?id=<? echo $item["cod"] ?>'>Eliminar</a>
</td>
</tr>

<?
$total += $item['preco'] * $item['quant'];
}
?>

</table>

<table cellpadding='5' cellspacing='1' width='500'>
<tr>
<td bgcolor='#99cc33'>
<font color='#ffffff'>
<b>Total: €</b> <? echo number_format($total, 2, ',', ''); ?> - Iva incluído.</font>
<font color='#666666' size='2'> (Preço sem portes de envio. Consulte a tabela de portes.)</font>
</td>
</tr>
</table>
<hr size=1 width="500" align='left'>
<input type='submit' value='Actualizar'> <input type='button' onclick='window.location.href="index.php"' value='Continuar às Compras'> <input type='button' onclick='window.location.href="comprar.php"' value='Finalizar Compras'>
</form>

<?}?>

</body>
</html>

 

Alguem me pode ajudar!? Obrigado! :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

if( in_array('nome_do_produto', $_SESSION) )
{
$_SESSION['qntProduto'] = $_SESSION['qntProduto']++;
}else{
// código que adiciona o produto no carrinho
}

?>

A lógica seria mais ou menos essa.

 

esse codigo era para colocar onde? penso que dentro do carrinho.php certo? tentei fazer como dizes mas continua a meter 2 produtos iguais e da um erro... adaptei ao meu codigo, ficou assim:

 

<?
session_start();
include('conexao.php');

// Obtem a id da sessão.
$sessao = session_id();

// Obtem o código do produto.
$produto = $_GET['produto'];
?>

<html>
<body>

<?
// código que adiciona o produto no carrinho
if( in_array('produto', $sessao)){
$sessao['quant'] = $sessao['quant']++;
}else{

if(!mysql_query('INSERT INTO carrinho (cod, quant, sessao) VALUES ("'.$produto.'", "1", "'.$sessao.'")', $con)){
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';

} else {

echo "OK... Adicionado ao Carrinho!<br><br>";
echo "<a href='index.php'>Continuar às Compras</a>";
}}
?>

</body>
</html>

e aparece este erro:

 

 

Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/rpublici/public_html/teste/Produtos/carrinho.php on line 17

OK... Adicionado ao Carrinho!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fez errado.

 

<?
session_start();
include('conexao.php');

// Obtem a id da sessão.
$sessao = session_id();

// Obtem o código do produto.
$produto = $_GET['produto'];
?>

<html>
<body>

<?
// código que adiciona o produto no carrinho
if( in_array($produto, $_SESSION)){
$_SESSION['quant'] = $_SESSION['quant']++;
}else{

if(!mysql_query('INSERT INTO carrinho (cod, quant, sessao) VALUES ("'.$produto.'", "1", "'.$sessao.'")', $con)){
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';

} else {

echo "OK... Adicionado ao Carrinho!<br><br>";
echo "<a href='index.php'>Continuar às Compras</a>";
}}
?>

</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fez errado.

 

<?
session_start();
include('conexao.php');

// Obtem a id da sessão.
$sessao = session_id();

// Obtem o código do produto.
$produto = $_GET['produto'];
?>

<html>
<body>

<?
// código que adiciona o produto no carrinho
if( in_array($produto, $_SESSION)){
$_SESSION['quant'] = $_SESSION['quant']++;
}else{

if(!mysql_query('INSERT INTO carrinho (cod, quant, sessao) VALUES ("'.$produto.'", "1", "'.$sessao.'")', $con)){
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';

} else {

echo "OK... Adicionado ao Carrinho!<br><br>";
echo "<a href='index.php'>Continuar às Compras</a>";
}}
?>

</body>
</html>

 

ok ja corrigi e meti como esta aí, deixou de dar erros mas continua a adicionar os 2 produtos na lista em vez de alterar o numero pra 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem nada a ver com SESSION... Você tá gravando o carrinho de compras no BD... Então você tem que mudar no banco de dados...

 

Tira tudo que foi feito aqui... E faz mais ou menos isto

// código que adiciona o produto no carrinho
$qry = mysql_query(SELECT COUNT(*) FROM tabela WHERE id = ID_DO_PRODUTO_DO_CARRINHO);
$qtde = mysql_num_rows($qry);

if ($qtde > 0){
if(!mysql_query('UPDATE carrinho SET qtde = (qtde + 1) WHERE id = ID_DO_PRODUTO_DO_CARRINHO)){
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';
} else {

echo "OK... Adicionado ao Carrinho!<br><br>";
echo "<a href='index.php'>Continuar às Compras</a>";
	 

} else {

if(!mysql_query('INSERT INTO carrinho (cod, quant, sessao) VALUES ("'.$produto.'", "1", "'.$sessao.'")', $con)){
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';

} else {

echo "OK... Adicionado ao Carrinho!<br><br>";
echo "<a href='index.php'>Continuar às Compras</a>";
}
}

Veja que tem que arrumar as querys... completa com os campos devidos... A lógica é mais ou menos esta... usando o formato que você usou, de gravar no banco de dados...

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao meter assim como dizes da erro... o codigo actual que tenho é:

 

<?
$id = $_GET['id'];

// código que selecciona o produto no carrinho
$qry = mysql_query("SELECT COUNT(*) FROM produtos, WHERE id = '$id'");
$qtde = mysql_num_rows($qry);

if ($qtde > 0){
// código que actualiza o produto no carrinho
if(!mysql_query("UPDATE carrinho SET qtde = (qtde + 1) WHERE id = '$id'")){
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';

}else{

echo "OK... Adicionado ao Carrinho!<br><br>";
echo "<a href='index.php'>Continuar às Compras</a>";
	
}else{

// código que adiciona o produto no carrinho
if(!mysql_query("INSERT INTO carrinho (cod, quant, sessao) VALUES ('.$produto.', '1', '.$sessao.')", $con)){
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';

}else{

echo "<center><br><font size='5' color='red'><b>OK... Produto Adicionado ao Carrinho!</b></font><br><br>";
echo "<center><a href='index.php'><img src='BotLoja.png' border='0'></a> <a href='verProdutos.php'><img src='BotCarrinho.png' border='0'></a>";
}}
?>

 

e da o seguinte erro:

 

Parse error: syntax error, unexpected T_ELSE in /home/rpublici/public_html/teste/Produtos/carrinho.php on line 19 :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim

if ($qtde > 0){
// código que actualiza o produto no carrinho
$sql = "UPDATE carrinho SET qtde = (qtde + 1) WHERE id = '$id'";
}else{

// código que adiciona o produto no carrinho
$sql = "INSERT INTO carrinho (cod, quant, sessao) VALUES ('.$produto.', '1', '.$sessao.')";
}
$x = mysql_query($sql);
if ($x){
echo "OK... Adicionado ao Carrinho!<br><br>";
echo "<a href='index.php'>Continuar às Compras</a>";
} else {
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou a usar este codigo:

 

<?
session_start();
include('conexao.php');

$id = $_GET['id'];

// código que selecciona o produto no carrinho
$qry = mysql_query("SELECT COUNT(*) FROM produtos, WHERE id = '$id'");
$qtde = mysql_num_rows($qry);

if ($qtde > 0){
// código que actualiza o produto no carrinho
$sql = "UPDATE carrinho SET qtde = (qtde + 1) WHERE id = '$id'";
}else{

// código que adiciona o produto no carrinho
$sql = "INSERT INTO carrinho (cod, quant, sessao) VALUES ('.$produto.', '1', '.$sessao.')";
}
$x = mysql_query($sql);
if ($x){
echo "OK... Adicionado ao Carrinho!<br><br>";
echo "<a href='index.php'>Continuar às Compras</a>";

} else {

echo "<center><br><font size='5' color='red'><b>OK... Produto Adicionado ao Carrinho!</b></font><br><br>";
echo "<center><a href='index.php'><img src='BotLoja.png' border='0'></a> <a href='verProdutos.php'><img src='BotCarrinho.png' border='0'></a>";
}
?>

 

 

da o seguinte erro:

 

 

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/rpublici/public_html/teste/Produtos/carrinho.php on line 9

OK... Adicionado ao Carrinho!

 

Continuar às Compras

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra que COUNT e mysql_num_rows?

 

Usa só o num_rows:

 

$query = mysql_query ("SELECT *...");

$num = mysql_num_rows($query);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este erro está dizendo que o que foi pro mysql_num_rows não é um resultado mysql. Veja que isto acontece quando ocorre um erro na query.

 

Troca isto

$qry = mysql_query("SELECT COUNT(*) FROM produtos, WHERE id = '$id'");

Por isto

$qry = mysql_query("SELECT COUNT(*) FROM produtos, WHERE id = '$id'") or die(mysql_error());

Coloca o or die(mysql_error()) sempre onde tiver mysql_query.

 

Carlos Eduardo

 

PS: Vou querer participação neste projeto... hahuauhhuauha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pra que COUNT e mysql_num_rows?

 

Usa só o num_rows:

 

$query = mysql_query ("SELECT *...");

$num = mysql_num_rows($query);

Pois é... Ia sugerir de uma forma e acabei misturando as duas...

 

Obrigado pelo aviso

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae lek, vi o erro agora:

 

$qry = mysql_query("SELECT COUNT(*) FROM produtos, WHERE id = '$id'") or die(mysql_error());

Coloca assim

 

$qry = mysql_query("SELECT COUNT(*) AS num_resultados FROM produtos WHERE id='$id'") or die(mysql_error());

Ae pra exibir tu bota:

 

$arr = mysql_fetch_array($qry);

echo $arr["num_resultados"];

Compartilhar este post


Link para o post
Compartilhar em outros sites

mau demaissssssss :o ao meter isso agora aparece simplesmente so: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = ''' at line 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua variável $id não tá enviando nenhum valor para a query.

 

Dá um echo nela pra ver se tá populada. E tenta tirar os espaços entre o id=', assim:

 

$qry = mysql_query("SELECT COUNT(*) AS num_resultados FROM produtos WHERE id='$id'") or die(mysql_error());

falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resumidamente, o unico codigo que ainda funciona mais ou menos é o inicial, ou seja este:

 

<?
session_start();
include('conexao.php');

// Obtem a id da sessão.
$sessao = session_id();

// Obtem o código do produto.
$produto = $_GET['produto'];
?>

<html>
<body>

<?
// código que adiciona o produto no carrinho
if( in_array($produto, $_SESSION)){
$_SESSION['quant'] = $_SESSION['quant']++;

}else{

if(!mysql_query('INSERT INTO carrinho (cod, quant, sessao) VALUES ("'.$produto.'", "1", "'.$sessao.'")', $con)){
echo 'O produto não pode ser adicionado ao carrinho de compras';
echo '<br><a href="index.php">Voltar</a>';

}else{

echo "<center><br><font size='5' color='red'><b>OK... Produto Adicionado ao Carrinho!</b></font><br><br>";
echo "<center><a href='index.php'><img src='BotLoja.png' border='0'></a> <a href='verProdutos.php'><img src='BotCarrinho.png' border='0'></a>";
}}
?>

</body>
</html>

 

todos os outros que me deram ou simplesmente n funcionam ou dao erros e mais erros... continuo sem ter o meu problema resolvido :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha... a lógica é a que eu te passei... Só tem erro de sintaxe...Imprime a query e veja o que está errado... O Red Fenix achou um erro (uma , a mais).

 

Provavelmente era só isto que estava errado.

 

todos os outros que me deram ou simplesmente n funcionam ou dao erros e mais erros... continuo sem ter o meu problema resolvido

Cara... tu tá muito errado no teu pensamento... o fórum não serve para as pessoas te DAREM códigos... as pessoas tentam TE AJUDAR a colocar o seu para funcionar.

 

Estou te abandonando... Vamos ver se outro resolve te ajudar, porque pra mim deu.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

Vamos com calma, ok!?

 

Me diga como tu idealizou teu sistema e como está a estrutura da tua base de dados.

 

Falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae amigo,

 

Faça o seguinte.

 

você vai trabalhar com duas tabelas nesse caso. Uma que registra os ID's e quantidades dos produtos cadastrados em cada carrinho (produtos_car) e outra que registra os carrinhos de cada sessão (carrinhos). Ae você vai relacionar as duas.

 

IMPORTANTE: A tabela produtos_car NÃO contém as informações dos produtos cadastrados no site. Estas devem estar em outra tabela e o id do produto a ser adicionado deve ser passado via URL.

 

Copie e cole o seguinte código pra criar as tabelas SQL:

 

CREATE TABLE `carrinhos` (
  `carrinho_id` int(15) NOT NULL auto_increment,
  `sessao_carrinho` varchar(50) NOT NULL,
  PRIMARY KEY  (`carrinho_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=0;

CREATE TABLE `produtos_car` (
  `id_produto` int(15) NOT NULL,
  `carrinho_p` int(15) NOT NULL,
  `quantidade` int(15) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Agora utilize o seguinte código na página carrinho.php:

 

<?php
session_start();

include "conexao.php";

$sessao = session_id();

$prod = intval($_GET["produto"]);

// Aqui verifico se existe algum carrinho pra essa sessão
$selc = mysql_query("SELECT * FROM carrinhos WHERE sessao_carrinho='$sessao'") or die(mysql_error());
$numrowsc = mysql_num_rows($selc);


//Se existir, cadastro os produtos dentro desse carrinho
if($numrowsc > 0) {
	
	$arr = mysql_fetch_array($selc);
	$id_carrinho = $arr["carrinho_id"]; // Pego o id do carrinho em questão
	
	$selp = mysql_query("SELECT * FROM produtos_car WHERE id_produto='$prod' AND carrinho_p='$id_carrinho'") or die(mysql_error()); // Seleciono o produto desse carrinho
	
	if(mysql_num_rows($selp) > 0) { // Verifico se já existe um produto igual registrado pra esse carrinho. Se existir, aumento a quantidade em +1
		
		$info = mysql_fetch_array($selp);
		$qtde = $info["quantidade"];
		$nova_qtde = $qtde + 1;
		
		$sql = "UPDATE produtos_car SET quantidade='$nova_qtde' WHERE id_produto='$prod' AND carrinho_p='$id_carrinho'";	
	}
	else { // Se não existir, registro com quantidade = 1
		
		$sql = "INSERT INTO produtos_car (id_produto, carrinho_p, quantidade) VALUES('$prod', '$id_carrinho', '1')";	
	}
	
	$query = mysql_query($sql);
}
//Se não existir, crio o carrinho para então registrar os produtos
else {
	
	$crio_carrinho = mysql_query("INSERT INTO carrinhos(carrinho_id, sessao_carrinho) VALUES('', '$sessao')");  
	
	$selcar = mysql_query("SELECT * FROM carrinhos WHERE sessao_carrinho='$sessao'") or die(mysql_error());

	$arr = mysql_fetch_array($selcar);
	$id_carrinho = $arr["carrinho_id"]; // Pego o id do carrinho em questão
	
	$selp = mysql_query("SELECT * FROM produtos_car WHERE id_produto='$prod' AND carrinho_p='$id_carrinho'") or die(mysql_error()); // Seleciono o produto desse carrinho
	
	if(mysql_num_rows($selp) > 0) { // Verifico se já existe um produto igual registrado pra esse carrinho. Se existir, aumento a quantidade em +1
		
		$info = mysql_fetch_array($selp);
		$qtde = $info["quantidade"];
		$nova_qtde = $qtde + 1;
		
		$sql = "UPDATE produtos_car SET quantidade='$nova_qtde' WHERE id_produto='$prod' AND carrinho_p='$id_carrinho'";	
	}
	else { // Se não existir, registro com quantidade = 1
		
		$sql = "INSERT INTO produtos_car (id_produto, carrinho_p, quantidade) VALUES('$prod', '$id_carrinho', '1')";	
	}
	
	$query = mysql_query($sql);
}

if($query) {
	
	echo "Ok! Produto adicionado ao carrinho com sucesso!<br />";
	echo "<a href='#'>Voltar às compras</a>";
}
else {
	
	echo "O produto não pôde ser adicionado ao carrinho!<br />";
	echo "<a href='#'>Voltar</a>";
}

?>

Você pode adaptar às suas necessidades

 

Abraços

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.