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

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

 

 

xiiii agradeço a ajuda, mas isso de criar novas tabelas iria fazer com que tivesse que alterar todos os codigos ja existentes http://forum.imasters.com.br/public/style_emoticons/default/upset.gif eu colo aqui as minhas tabelas para veres se não da para usar como ta:

 

 

CREATE TABLE IF NOT EXISTS `carrinho` (

`id` int(11) NOT NULL auto_increment,

`cod` int(11) NOT NULL,

`quant` int(11) NOT NULL,

`sessao` varchar(64) NOT NULL,

PRIMARY KEY (`id`),

KEY `sessao` (`sessao`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=159 ;

 

 

CREATE TABLE IF NOT EXISTS `produtos` (

`id` int(11) NOT NULL auto_increment,

`nome` varchar(130) NOT NULL,

`img` varchar(36) NOT NULL,

`preco` float NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

 

 

sao estas as que estou a usar... todo o carrinho funciona mt bem, excepto que n altera o numero de produtos e em vez disso adiciona 2 ou mais iguais

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se assim resolve seu problema:

 

<?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 carrinho WHERE sessao='$sessao' AND cod='$prod'") or die(mysql_error());
$numrows = mysql_num_rows($selc);
$arr = mysql_fetch_array($selc);

if($numrows > 0) { // Se retornar carrinhos para esta sessão, a var $qtde assume o valor do campo quant
	
	$qtde = $arr["quant"];
}
else { // Caso contrário, assume valor 0
	
	$qtde = "0";
}
if($qtde >= 1) { // Verifico se já existe um produto igual registrado pra esse carrinho. Se existir, aumento quantidade em +1
		
	$nova_qtde = $qtde + 1;
		
	$sql = "UPDATE carrinho SET quant='$nova_qtde' WHERE sessao='$sessao' AND cod='$prod'";	
}
else { // Se não existir, registro com quantidade = 1
		
	$sql = "INSERT INTO carrinho (id, cod, quant, sessao) VALUES('', '$prod', '1', '$sessao')";	
}
	
$query = mysql_query($sql);

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

?>

Falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se assim resolve seu problema:

 

<?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 carrinho WHERE sessao='$sessao' AND cod='$prod'") or die(mysql_error());
$numrows = mysql_num_rows($selc);
$arr = mysql_fetch_array($selc);

if($numrows > 0) { // Se retornar carrinhos para esta sessão, a var $qtde assume o valor do campo quant
	
	$qtde = $arr["quant"];
}
else { // Caso contrário, assume valor 0
	
	$qtde = "0";
}
if($qtde >= 1) { // Verifico se já existe um produto igual registrado pra esse carrinho. Se existir, aumento quantidade em +1
		
	$nova_qtde = $qtde + 1;
		
	$sql = "UPDATE carrinho SET quant='$nova_qtde' WHERE sessao='$sessao' AND cod='$prod'";	
}
else { // Se não existir, registro com quantidade = 1
		
	$sql = "INSERT INTO carrinho (id, cod, quant, sessao) VALUES('', '$prod', '1', '$sessao')";	
}
	
$query = mysql_query($sql);

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

?>

Falo

 

resolveu sim... deu um erro no botao voltar, mas eu ja arranjei :) mt mt obrigado... eu tenho ainda mais 2 duvidas que gostava de resolver... uma era meter os produtos no index.php a aparecerem em 4 colunas de 3 produtos cada, com a paginação em baixo e outra era em detalhes.php mostrar a imagem com marca de agua... será que podias ajudar-me a conseguir isso? vou colar os codigos para veres...

 

 

index.php

 

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

<html>
<body>
<center>
<img src='BannerLoja.png' border='0'><br>
<table cellpadding='5' cellspacing='1' width='800'>
<tr>
<td align='center'>

<?
// 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'].'"><img src="BotAdicionar.png" border="0"></a><br>';
echo '<a href="verProdutos.php"><img src="BotCarrinho.png" border="0"></a></div>';
}
?>

</td>
</tr>
</table>
</body>
</html>

 

detalhes.php

 

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

<html>
<body>

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

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

if(mysql_num_rows($itens) < 1){
echo "Produto inválido!<br><br><a href='index.php'>Ir para a loja</a>";

} else {

while($item = mysql_fetch_assoc($itens)){
?>

<center>
<img src='BannerLoja.png' border='0'><br>
<table bgcolor='#99cc33' cellpadding='5' cellspacing='1' width='800'>
<tr>
<td bgcolor='#ffffff' align='center'>

<? 
echo '<br><img width=400 height=300 border=0 src="Imagens/'.$item['img'].'"><br><b>'.$produto['nome'].'</b><br>'; 
?>

</td>
</tr>
<tr>
<td bgcolor='#99cc33' align='center'>
<center>
<font size='2' color='#ffffff'><b>Detalhes do Produto:</b></font>
</td>
</tr>
<tr>
<td bgcolor='#e3e3e3' align='center'>
<font size='4' color='#000000'><b><? echo $item['cod'] ?><? echo $item['nome'] ?></b></font>
<br>
<font size='3' color='#666666'>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>
</td>
</tr>
<tr>
<td bgcolor='#99cc33' align='center'>
<a href="verProdutos.php"><img src="BotCarrinho.png" border="0"></a> <a href="index.php"><img src="BotLoja.png" border="0"></a> <a href="finalizar.php"><img src="BotFinalizar.png" border="0"></a>
</td>
</tr>
</table>

<?
}}
?>

</body>
</html>

 

é isso aí acima... obrigado por tudo mais uma vez!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae parceiro,

 

Quanto a sua primeira dúvida, vou te passar a lógica:

 

Você cria uma div com um id que passe um width de, por exemplo, 800px para englobar toda a exibição de produtos. Ae você coloca, quando exibir os produtos, uma div que delimite um width de 200px por produto e coloque um float:left em cada uma dessas divs. Depois joga um LIMIT 12 na query SQL. Mais ou menos isso.

 

Não pude analisar seus códigos ainda pq estou ocupado agora...

 

Já a segunda, dê uma olhada nesses links:

 

http://codigofonte.uol.com.br/codigo/php/i...-marca-dagua%5D

http://clares.wordpress.com/2008/07/17/mar...gua-em-imagens/

 

Falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae parceiro,

 

Quanto a sua primeira dúvida, vou te passar a lógica:

 

Você cria uma div com um id que passe um width de, por exemplo, 800px para englobar toda a exibição de produtos. Ae você coloca, quando exibir os produtos, uma div que delimite um width de 200px por produto e coloque um float:left em cada uma dessas divs. Depois joga um LIMIT 12 na query SQL. Mais ou menos isso.

 

Não pude analisar seus códigos ainda pq estou ocupado agora...

 

Já a segunda, dê uma olhada nesses links:

 

http://codigofonte.uol.com.br/codigo/php/i...-marca-dagua%5D

http://clares.wordpress.com/2008/07/17/mar...gua-em-imagens/

 

Falo

 

 

ja avancei com o codigo no index.php

 

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

<html>
<body>
<center>
<img src='BannerLoja.png' border='0'><br>
<table cellpadding='5' cellspacing='1' width='800'>
<tr>
<td align='center'>

<?
// Faz o pedido à base de dados.
$produtos = mysql_query('SELECT * FROM produtos ORDER BY RAND() LIMIT 12', $con);
while($produto = mysql_fetch_assoc($produtos)){
echo '<div style="border: 0px width: 800px; float: center;">';

// Mostra a imagem e nome do produto.
echo '<div width="200" style="border: 1px solid white; width: 195px; float: left;"><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'].'"><img src="BotAdicionar.png" border="0"></a><br><br></div>';
}
?>

</td>
</tr>
</table>
<? echo '<hr size=1 width=800 color=green><a href="verProdutos.php"><img src="BotCarrinho.png" border="0"></a> <a href="finalizar.php"><img src="BotFinalizar.png" border="0"></a></div>'; ?>
</body>
</html>

está a funcionar bem, porem assim so mostra os 12 produtos, n cria a paginaçao :unsure:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

A paginação você tem buscar no google.

 

Existem vários sistemas de páginação por ae, inclusive aqui mesmo no fórum.

 

Falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

tentei usar esta aqui...

 

// Paginação dos Produtos
<?
$regsporpagina = 2;
$ini = $pagina*$regsporpagina;
$sql_logs = "select * from produtos";
$cont_rows = mysql_query($sql_logs, $con) or die(mysql_error());
$cont_total = mysql_num_rows($cont_rows);
$sql_logs.=" limit $ini, $regsporpagina  ";
$res_logs = mysql_query($sql_logs, $con) or die(mysql_error());
$i = 0;
$totalpaginas = ceil($cont_total / $regsporpagina);
if ($totalpaginas < 1){$totalpaginas =1;}
?>

<br>
<tr>
<td colspan="4" height="20" align="center">

<?
//Montando o Rodapé de Navegação

if ($_GET['pagina'] > 0){	
$menos = $_GET['pagina'] - 1;	

echo "<a href='index.php?produtos=$produtos&acao=N&pagina=0&tab=7'>« Anteriores</a>";

}else{

echo "« Anterior";
}
for($i = 0; $i < $totalpaginas; $i++){	
$linksp = $i + 1;

if ($_GET['pagina'] == $i){
echo " | <b>".$linksp."</b>";

}else{

echo " | <a href='index.php?produtos=$produtos&acao=N&pagina=$i&tab=7'>$linksp</a>";
}}

if($_GET['pagina'] < ($totalpaginas - 1)){
$mais = $_GET['pagina'] + 1;
echo " | <a href='index.php?produtos=$produtos&acao=N&pagina=$mais&tab=7'>Próximos »</a>";

}else{

echo " | Próximos »";
}
?>

 

acontece que mostra os links td certo e tal, mas ao clicar n vai a lado algum...

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.