click01 0 Denunciar post Postado Junho 29, 2009 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
André D. Molin 15 Denunciar post Postado Junho 29, 2009 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
Matias Rezende 50 Denunciar post Postado Junho 29, 2009 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
click01 0 Denunciar post Postado Junho 29, 2009 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
Matias Rezende 50 Denunciar post Postado Junho 29, 2009 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
click01 0 Denunciar post Postado Junho 29, 2009 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
André D. Molin 15 Denunciar post Postado Junho 29, 2009 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
click01 0 Denunciar post Postado Junho 29, 2009 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
André D. Molin 15 Denunciar post Postado Junho 29, 2009 Mas já? Tentou duas vezes e já desistiu? Compartilhar este post Link para o post Compartilhar em outros sites
click01 0 Denunciar post Postado Junho 29, 2009 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
click01 0 Denunciar post Postado Junho 29, 2009 André pode dar ua vista de olhos no projecto para ver do que estou falando em: http://rpublicidade.com/teste/Produtos/index.php Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Junho 30, 2009 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
click01 0 Denunciar post Postado Junho 30, 2009 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
Matias Rezende 50 Denunciar post Postado Junho 30, 2009 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
click01 0 Denunciar post Postado Junho 30, 2009 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
Matias Rezende 50 Denunciar post Postado Junho 30, 2009 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
click01 0 Denunciar post Postado Junho 30, 2009 olha ai o cod no PHPmyADMIN não é disso certamente... :( Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Junho 30, 2009 Tá... você já fez estas últimas alterações que eu coloquei? Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Junho 30, 2009 É, cade o WHERE naquela consulta? É ele que filtra os produtos. Compartilhar este post Link para o post Compartilhar em outros sites
click01 0 Denunciar post Postado Junho 30, 2009 É, 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