Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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?
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 produtoecho "Produto Inválido";
}
?><b><a href="exibe_produto.php?id=<?php echo $item['cod'] ?>"><?php echo $item['nome'] ?></a></b>
Mais ou menos isto
Carlos Eduardo
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!
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>detalhes.php?<? echo $item['cod'] ?>">
Por isto
detalhes.php?id=<? echo $item['cod'] ?>">
Deve funcionar
Carlos Eduardo
>
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>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) :(
>
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.
não deu :( ja n sei mais que fazer... sinceramente ja tentei tanta coisa que estou a desesperar!!! AJUDEM-ME PLEASE!
Mas já?
Tentou duas vezes e já desistiu?
>
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... :(
André pode dar ua vista de olhos no projecto para ver do que estou falando em:
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
>
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! <_<:(
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
sim tenho acesso completo a tudo, mas n acredito que seja isso, pois está feito para gerar um id unico por sessao
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
olha ai o cod no PHPmyADMIN
/applications/core/interface/imageproxy/imageproxy.php?img=http://rpublicidade.com/teste/Produtos/produtos.jpg&key=333ed4a9d2e05cedaa8bcc46d8267eb820a705185ce89ee585db65835813f05d" alt="Imagem Postada" />
/applications/core/interface/imageproxy/imageproxy.php?img=http://rpublicidade.com/teste/Produtos/carrinho.jpg&key=8d665bf164ce5d91d18b34b3b072388f431da689b0a3c45977bd9f07015e5548" alt="Imagem Postada" />
não é disso certamente... :(
Tá... você já fez estas últimas alterações que eu coloquei?
Carlos Eduardo
É, cade o WHERE naquela consulta?
É ele que filtra os produtos.
>
É, 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 :(
Mas na consulta que fez no phpMyAdmin, não vi nenhum WHERE.
É de la que estou falando.
ja daaaaaaaaaaaaaaaaaaa :) ja mostra o produto, tinha um erro no codigo e junto com as vossas alteraçoes ja funciona bem :) obrigado! [RESOLVIDO]
outra situação... se no index.php eu clicar 2 vezes no mesmo produto, ele adiciona 2 vezes o item no verProduto em vez de alterar apenas para 2 na caixa da quantidade... poderá ser de que ????
Não é erro, é falta de código para fazer isso.
Basta fazer uma verificação nas sessoes (que é onde os produtos do carrinhos ficam armazenados).
Se o produto já estiver la, adicione mais um ($i++).
Se não, adiciona o produto.
Se tiver dificuldade de desenvolver isso, só avisar.
Olá andré... olha... se calhar n era má ideia pedir uma ajudinha pra essa parte do codigo... hehehe grin.gif é que tenho receio de estragar o que ja levou tanto tempo a fazer... alem disso gostava de acrescentar 2 coisas no codigo que n sei fazer... uma era meter marca de agua nas imagens e a outra paginar os produtos da loja... em vez de aparecer um abaixo do outro, gostva que aparecesse 4 colunas de 3 produtos uma ao lado da outra e a paginaçao abaixo para ver mais produtos... n sei se me fiz entender, algo tipo
-------------------------------------------------------------------------------------------------------------------
| 1ª coluna c/3 produtos | 2ª coluna c/3 produtos | 3ª coluna c/3 produtos | 4ª coluna c/3 produtos |
-------------------------------------------------------------------------------------------------------------------
| 1ª coluna c/3 produtos | 2ª coluna c/3 produtos | 3ª coluna c/3 produtos | 4ª coluna c/3 produtos |
-------------------------------------------------------------------------------------------------------------------
| 1ª coluna c/3 produtos | 2ª coluna c/3 produtos | 3ª coluna c/3 produtos | 4ª coluna c/3 produtos |
-------------------------------------------------------------------------------------------------------------------
<< Pag Anterior 1, 2, 3, 4 ,5 Proxima Pag >>
Algo mais ou menos como no desenho acima... fica mais facil para quem navega e mais bonito no visual...
Quanto á marca de agua, gostava que aparecesse apenas na imagem dos detalhes, o resto n precisa.
Desde já obrigado!
Sobre a paginação, no laboratório de script tem várias.
Sobre aparecer em colunas, dê uma olhada neste tópico.
http://forum.imasters.com.br/index.php?showtopic=350897
Carlos Eduardo
Basta trocar essa query.
Para algo mais ou menos assim: Onde $produto vem por POST ou GET, por exemplo.$produto = $_GET['prod'];