click01 0 Denunciar post Postado Julho 2, 2009 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
André D. Molin 15 Denunciar post Postado Julho 2, 2009 <?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. Compartilhar este post Link para o post Compartilhar em outros sites
click01 0 Denunciar post Postado Julho 2, 2009 <?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
André D. Molin 15 Denunciar post Postado Julho 2, 2009 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
click01 0 Denunciar post Postado Julho 3, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 3, 2009 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
click01 0 Denunciar post Postado Julho 3, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 3, 2009 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
click01 0 Denunciar post Postado Julho 3, 2009 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
Red FeniX 4 Denunciar post Postado Julho 3, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 3, 2009 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
Matias Rezende 50 Denunciar post Postado Julho 3, 2009 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
Red FeniX 4 Denunciar post Postado Julho 3, 2009 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
click01 0 Denunciar post Postado Julho 3, 2009 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
Red FeniX 4 Denunciar post Postado Julho 3, 2009 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
click01 0 Denunciar post Postado Julho 3, 2009 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
click01 0 Denunciar post Postado Julho 3, 2009 o site é http://rpublicidade.com/teste/Produtos/index.php aqui podem ver o que estou a fazer ao mm tempo quem sabe ajude a resolver melhor os codigos Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 3, 2009 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
Red FeniX 4 Denunciar post Postado Julho 3, 2009 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
Red FeniX 4 Denunciar post Postado Julho 3, 2009 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