Ir para conteúdo

POWERED BY:

Arquivado

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

click01

Simples Carrinho de Compras com php/sql

Recommended Posts

boas...

 

tenho andado a fazer um carrinho de compras baseado em alguns tuturiais que encontrei na net... já melhorei bastante o código que funciona perfeitamente, porem gostava que na lista de compras que aparece no carrinho com os varios produtos adicionados, fosse possivel, ao clicar no nome do produto, exibir uma ficha detalhada do produto. Atá aqui tudo bem, acontece que apenas estou a conseguir exibir uma pagina que mostra todos os detalhes de todos os produtos no carrinho, em vez de mostrar apenas os detalhes do produto em que cliquei... abaixo o codigo php:

 

 

detalhes.php

 

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

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

<html>
<body>

<?
$itens = mysql_query('SELECT * FROM carrinho,produtos
WHERE carrinho.cod = produtos.id AND carrinho.sessao = "'.$sessao.'"');

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

} else {

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

<center>
<? echo '<br><img width=400 height=300 border=0 src="Imagens/'.$item['img'].'"><br><b>'.$produto['nome'].'</b><br>'; ?>
<br>
<b><a href="detalhes.php?<? echo $item['cod'] ?>"><? echo $item['nome'] ?></a></b>
<br>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>

<?
}}
?>

</body>
</html>

 

alguem me consegue ajudar a perceber porque exibe todos os detalhes em vez dos detalhes apenas do produto selecionado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta trocar essa query.

 

$itens = mysql_query('SELECT * FROM carrinho,produtos
WHERE carrinho.cod = produtos.id AND carrinho.sessao = "'.$sessao.'"');

Para algo mais ou menos assim:

 

$itens = mysql_query("SELECT * FROM produtos
WHERE produtos.id = '{$produto}'");

Onde $produto vem por POST ou GET, por exemplo.

 

$produto = $_GET['prod'];

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se fizer como o André falou vai parar de funcionar o carrinho de compras.

 

Crie uma página exibe_produto.php com um código mais ou menos assim...

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

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

if(mysql_num_rows($itens) < 1){
	$rs = mysql_fetch_assoc($itens);
	//aqui você coloca para exibir os detalhes do produto
} else {
echo "Produto Inválido";
}
?>

No código do carrinho você muda isto.

 

<b><a href="exibe_produto.php?id=<?php echo $item['cod'] ?>"><?php echo $item['nome'] ?></a></b>

Mais ou menos isto

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Infelizmente n funciona de nenhuma das maneiras... :( para ser mais explicito, vou colar os codigos de 3 ficheiros em causa... o "index.php" que mostra os produtos na loja, o "verProdutos.php" que mostra o carrinho com as compras efectuadas e onde está o link que quero meter a funcionar (ao clicar no nome do produto abre os detalhes do mesmo) e o "detalhes.php" onde por agora exibe apenas a imagem, nome e preço do produto, mais tarde terá mais infos...

 

 

index.php

 

<?
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

 

<?
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?<? 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?<? 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>

 

detalhes.php

 

 

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

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

<html>
<body>

<?
$itens = mysql_query('SELECT * FROM carrinho,produtos
WHERE carrinho.cod = produtos.id AND carrinho.sessao = "'.$sessao.'"');

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

} else {

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

<center>
<? echo '<br><img width=400 height=300 border=0 src="Imagens/'.$item['img'].'"><br><b>'.$produto['nome'].'</b><br>'; ?>
<br>
<b><a href="detalhes.php?<? echo $item['cod'] ?>"><? echo $item['nome'] ?></a></b>
<br>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>

<?
}}
?>

</body>
</html>

 

 

é isto acima... o codigo como está funciona tudo maravilha, excepto que ao clicar no nome do produto no "verProdutos.php" está a mostrar os detalhes de todos os produtos no carrinho e a intenção é fazer com que mostre apenas os detalhes do produto clicado!

 

NOTA: existem 2 bases de dados...

 

TABLE produtos (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

nome VARCHAR(130) NOT NULL,

img VARCHAR(36) NOT NULL,

preco FLOAT NOT NULL

);

 

TABLE carrinho (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

cod INT NOT NULL,

quant INT NOT NULL,

sessao VARCHAR(64) NOT NULL,

INDEX sessao (sessao)

);

 

 

Agradeço a vossa ajuda se possível para quebrar este galho que tanto me tem tirado o sono. Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então é aqui mesmo... A solução do André era a correta.

 

detalhes.php

<?
//session_start(); desnecessária
include('conexao.php');

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

<html>
<body>

<?php

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

$itens = mysql_query('SELECT * FROM produtos
WHERE cod = '.$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>
<? echo '<br><img width=400 height=300 border=0 src="Imagens/'.$item['img'].'"><br><b>'.$produto['nome'].'</b><br>'; ?>
<br>
<b><a href="detalhes.php?<? echo $item['cod'] ?>"><? echo $item['nome'] ?></a></b>
<br>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>

<?
}}
?>

</body>
</html>

VerProdutos.php você troca toda vem que tiver isto

detalhes.php?<? echo $item['cod'] ?>">

Por isto

detalhes.php?id=<? echo $item['cod'] ?>">

Deve funcionar

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então é aqui mesmo... A solução do André era a correta.

 

detalhes.php

<?
//session_start(); desnecessária
include('conexao.php');

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

<html>
<body>

<?php

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

$itens = mysql_query('SELECT * FROM produtos
WHERE cod = '.$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>
<? echo '<br><img width=400 height=300 border=0 src="Imagens/'.$item['img'].'"><br><b>'.$produto['nome'].'</b><br>'; ?>
<br>
<b><a href="detalhes.php?<? echo $item['cod'] ?>"><? echo $item['nome'] ?></a></b>
<br>
<b>€</b> <? echo number_format($item['preco'], 2, ',', '') ?>

<?
}}
?>

</body>
</html>

VerProdutos.php você troca toda vem que tiver isto

detalhes.php?<? echo $item['cod'] ?>">

Por isto

detalhes.php?id=<? echo $item['cod'] ?>">

Deve funcionar

 

Carlos Eduardo

 

 

nada... continua a mostrar os detalhes de todos os produtos no carrinho e não so de um (o selecionado) :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se fizer como o André falou vai parar de funcionar o carrinho de compras.

 

Crie uma página exibe_produto.php com um código mais ou menos assim...

É claro que teria que ser em outra pagina, \o/.

 

nada... continua a mostrar os detalhes de todos os produtos no carrinho e não so de um (o selecionado)

Vá no phpMyAdmin, vá na tabela dos produtos, selecione um produto la no phpMyAdmin ele mesmo cria uma query PHP para ti.

Gera essa query, troca os valores necessários por variaveis e manda bala.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não deu :( ja n sei mais que fazer... sinceramente ja tentei tanta coisa que estou a desesperar!!! AJUDEM-ME PLEASE!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas já?

Tentou duas vezes e já desistiu?

não desisti... estou é a desmotivar... ja editei estes codigos MILHARES de vezes para fazer uma coisa tao simples como mostrar apenas um produto seleccionado e nada está a funcionar... :( na adress bar, aparece tudo certo detalhes.php?id=3 por exemplo... mas continua a mostrar tds e n apenas esse... :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta trocar isto

$itens = mysql_query('SELECT * FROM produtos WHERE cod = '.$id)

Por isto

 

$itens = mysql_query("SELECT * FROM produtos WHERE cod = '$id'")

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta trocar isto

$itens = mysql_query('SELECT * FROM produtos WHERE cod = '.$id)

Por isto

 

$itens = mysql_query("SELECT * FROM produtos WHERE cod = '$id'")

Carlos Eduardo

não dizes em que ficheiro devo trocar isso, de qualquer forma troquei no detalhaes e não funciona... ainda n é desta! <_<:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tô com uma suspeita... você tem acesso ao Phpmyadmim ou algo parecido?? Dá uma olhada pra ver se o cod não está igual em todos os produtos...

 

Não estou vendo outra possibilidade.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim tenho acesso completo a tudo, mas n acredito que seja isso, pois está feito para gerar um id unico por sessao

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... Você fez o que o André sugeriu?

Vá no phpMyAdmin, vá na tabela dos produtos, selecione um produto la no phpMyAdmin ele mesmo cria uma query PHP para ti.

Gera essa query, troca os valores necessários por variaveis e manda bala.

Este é o SELECT que você tem que usar.

 

De qualquer forma, tenta trocar isto (na página detalhes.php)

$itens = mysql_query("SELECT * FROM produtos WHERE cod = '$id'")

Por isto

$itens = mysql_query("SELECT * FROM produtos WHERE id = '$id'")

Outra coisa... na página verProdutos.php, o link tá errado...

 

Troca isto

detalhes.php?<? echo $item['cod'] ?>">

Por isto

detalhes.php?id=<? echo $item['cod'] ?>">

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

É, cade o WHERE naquela consulta?

É ele que filtra os produtos.

o WHERE está la na linha de baixo... e onde voces me mandam trocar o $itens blablabla diz que nao existe no codigo essa linha :(

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.