Ir para conteúdo

POWERED BY:

Arquivado

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

Tayron Miranda

[Resolvido] Alterando quantidade de produto do carrindo de compra

Recommended Posts

Olá galera, estou fazendo um carrinho de compras, porém encontrei uma dificuldade na hora de alterar a quantidade do produto do carrinho de compras.... eu consigo colocar produtos no carrinho, excluir, mas estou com dificuldades na parte de alterar... alguém poderia me ajudar? Lembrando que quero alterar todos os produtos de uma vez só http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

 

conexao.php

<?
$url = "localhost";
$usuario = "root";
$senha = "";
$banco_de_dados = "carrinho";

@$conexao = mysql_connect($url,$usuario,$senha) 
           or die ("<center><br>Não foi possível fazer conexão com o banco de dados!</center>");

$Query = mysql_select_db($banco_de_dados, $conexao);
mysql_query("set NAMES latin1;");
?>

produto.php

<? include "conexao.php";?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Listar produtos</title>
</head>
<body>

<h1>Veja nossos produtos</h1>

<?
$Var_listar_produto = mysql_query("select id_produto, nome_produto, preco_produto from produto order by nome_produto asc");
if (mysql_num_rows ($Var_listar_produto)>0){
	while ($produto = mysql_fetch_object($Var_listar_produto)){
		echo "<div>".$produto->id_produto."</div>";
		echo "<div>".$produto->nome_produto."</div>";
		echo "<div>".number_format($produto->preco_produto,2,",",".")."</div>";
		echo "<a href='cart.php?acao=add&id=".$produto->id_produto."'>Adicionar ao Carrinho de compras</a><br /><br /><hr />";
	}

}
?>

</body>
</html>

 

cart.php // carrinho de compras

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

if (isset($_GET['acao'])){
// AQUI ADICIONO UM PRODUTO NO CARRINHO
	if ($_GET['acao']=="add"){	
	
		if (isset($_GET['id'])){
		
			if(is_numeric($_GET['id'])){
						
				$id_produto = addslashes(htmlentities($_GET['id']));
				
				if (mysql_num_rows(mysql_query("select nome_produto from carrinho where id_produto = '".$id_produto."' and session = '".session_id()."'")) == "0"){
				
					$Var_prod = mysql_query ("select id_produto, nome_produto, preco_produto from produto where id_produto = '".$id_produto."' ");
				
					if (mysql_num_rows ($Var_prod)>"0"){
						$produto = mysql_fetch_object($Var_prod);
						$Var_add_produto = mysql_query("insert into carrinho 
						(id_produto, nome_produto, preco_produto, qtd_produto, session) 
						values 
						('$id_produto','".$produto->nome_produto."','".$produto->preco_produto."', '1', '".session_id()."')");
						
					}
				}
			
			}
		
		}
		
	}
	// AQUI DELETO UM PRODUTO DO CARRINHO
	if ($_GET['acao']=="del"){

		if (isset($_GET['id'])){
		
			if (is_numeric($_GET['id'])){
				
				$id_produto = addslashes(htmlentities($_GET['id']));
				mysql_query("delete from carrinho where id_produto = '".$id_produto."'");
			
			}
			
		}
	
		
	}
	// AQUI ALTERO A QUALIDADE DE PRODUTOS DO CARRINHO
	if ($_GET['acao']=="altera_qtd"){
		
		if (isset($_POST['id_produto'])){
			
			$id_produto = addslashes(htmlentities($_POST['id_produto']));
			$qtd_produto = addslashes(htmlentities($_POST['qtd_produto']));
		
			mysql_query ("update carrinho set qtd_produto = '".$qtd_produto."' where id_produto = '".$id_produto."' and session = '".session_id()."'");
			
		}
	
	}


}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Carrinho de compras</title>
</head>
<body>

<h1>Carrinho de compras</h1>

<?
$Var_listar_produto = mysql_query("select id_produto, nome_produto, preco_produto, qtd_produto from carrinho where session = '".session_id()."' order by nome_produto asc");
if (mysql_num_rows ($Var_listar_produto)>0){

	$total_compra = 0;
	echo "<form action='cart.php?acao=altera_qtd' method='post'>";
	
	while ($produto = mysql_fetch_object($Var_listar_produto)){
		$total_compra += ($produto->preco_produto*$produto->qtd_produto);
		echo "<p>Remover: "."<a href='cart.php?acao=del&id=".$produto->id_produto."'>[x]</a>"."</p>";
		echo "<p>Id produto: ".$produto->id_produto."</p>";
		echo "<p>Nome produto: ".$produto->nome_produto."</p>";
		echo "<p>Valor produto: R$ ".number_format($produto->preco_produto,2,",",".")."</p>";
		echo "<p>QTD produto: <input type='text' name='qtd_produto' value='".$produto->qtd_produto."'></div>";
		echo "<input type='hidden' name='id_produto' value='".$produto->id_produto."'>";
		echo "<p>Subtotal produto: R$ ".number_format($produto->preco_produto*$produto->qtd_produto,2,",",".")."</p><hr />";		
		

	}
	echo "<input type='submit' value='Alterar quantidade'>";
	echo "</font>";
	echo "<p>TOTAL DA COMPRA: R$ ". number_format($total_compra,2,',','.')."</p>";
	echo "<a href='produto.php'><p>Continuar comprando</p></a>";			
}
?>

</body>
</html>

sql_banco de dados carrinho

-- phpMyAdmin SQL Dump
-- version 3.1.3.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Jul 17, 2009 as 05:13 PM
-- Versão do Servidor: 5.1.33
-- Versão do PHP: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Banco de Dados: `carrinho`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `carrinho`
--

CREATE TABLE IF NOT EXISTS `carrinho` (
  `id_carrinho` int(11) NOT NULL AUTO_INCREMENT,
  `id_produto` int(11) NOT NULL,
  `nome_produto` varchar(200) NOT NULL,
  `preco_produto` double(10,2) NOT NULL,
  `qtd_produto` int(11) NOT NULL,
  `session` text NOT NULL,
  PRIMARY KEY (`id_carrinho`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

--
-- Extraindo dados da tabela `carrinho`
--

INSERT INTO `carrinho` (`id_carrinho`, `id_produto`, `nome_produto`, `preco_produto`, `qtd_produto`, `session`) VALUES
(5, 1, 'Memória Ram 256 MB', 62.00, 1, '54b09cce2ef276f8d3f58a5b2173c817'),
(6, 2, 'Placa de Vídeo XYZ', 150.00, 1, '54b09cce2ef276f8d3f58a5b2173c817');

-- --------------------------------------------------------

--
-- Estrutura da tabela `produto`
--

CREATE TABLE IF NOT EXISTS `produto` (
  `id_produto` int(11) NOT NULL AUTO_INCREMENT,
  `nome_produto` varchar(200) NOT NULL,
  `preco_produto` double(10,2) NOT NULL,
  PRIMARY KEY (`id_produto`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Extraindo dados da tabela `produto`
--

INSERT INTO `produto` (`id_produto`, `nome_produto`, `preco_produto`) VALUES
(1, 'Memória Ram 256 MB', 62.00),
(2, 'Placa de Vídeo XYZ', 150.00),
(3, 'Notebook', 2300.00),
(4, 'Mouse Top', 57.25);

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara,

 

posta a linha que ta dando erro ai..

maior preguiça de ler todo seu "sistema"

uahuahua

Compartilhar este post


Link para o post
Compartilhar em outros sites

Buahhahah... no cart.php tem essa linha:

 

  // AQUI ALTERO A QUALIDADE DE PRODUTOS DO CARRINHO
        if ($_GET['acao']=="altera_qtd"){
                
                if (isset($_POST['id_produto'])){
                        
                        $id_produto = addslashes(htmlentities($_POST['id_produto']));
                        $qtd_produto = addslashes(htmlentities($_POST['qtd_produto']));
                
                        mysql_query ("update carrinho set qtd_produto = '".$qtd_produto."' where id_produto = '".$id_produto."' and session = '".session_id()."'");
                        
                }
        
        }
E esse aqui é o formulário com os dados para alterar....

<?
$Var_listar_produto = mysql_query("select id_produto, nome_produto, preco_produto, qtd_produto from carrinho where session = '".session_id()."' order by nome_produto asc");
if (mysql_num_rows ($Var_listar_produto)>0){

        $total_compra = 0;
        echo "<form action='cart.php?acao=altera_qtd' method='post'>";
        
        while ($produto = mysql_fetch_object($Var_listar_produto)){
                $total_compra += ($produto->preco_produto*$produto->qtd_produto);
                echo "<p>Remover: "."<a href='cart.php?acao=del&id=".$produto->id_produto."'>[x]</a>"."</p>";
                echo "<p>Id produto: ".$produto->id_produto."</p>";
                echo "<p>Nome produto: ".$produto->nome_produto."</p>";
                echo "<p>Valor produto: R$ ".number_format($produto->preco_produto,2,",",".")."</p>";
                echo "<p>QTD produto: <input type='text' name='qtd_produto' value='".$produto->qtd_produto."'></div>";
                echo "<input type='hidden' name='id_produto' value='".$produto->id_produto."'>";
                echo "<p>Subtotal produto: R$ ".number_format($produto->preco_produto*$produto->qtd_produto,2,",",".")."</p><hr />";            
                

        }
        echo "<input type='submit' value='Alterar quantidade'>";
        echo "</font>";
        echo "<p>TOTAL DA COMPRA: R$ ". number_format($total_compra,2,',','.')."</p>";
        echo "<a href='produto.php'><p>Continuar comprando</p></a>";                    
}
?>

Como os campos são montados dinamicamente, eu não sei como pegar algo que é mostrado dinâmico e atualizar ele no banco de dados... tipo: ele vai trazer pra mim: 3, 4 ou 20 produtos... e cada um tem uma unidade caso eu queira ter 3 de um produto, 100 de outro, eu tenho que ser capaz de atualizar isso de uma vez só...!

 

O lance todo, tá só no cart.php, o resto do código eu coloquei só se caso alguém quiser ver ele funcinando....

Tudo que tenho que fazer é pegar o valor (QTD produto) e alterar essa quantidade no banco de dados...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

Preste atenção no seu código que você vai entender o que vou te falar:

 

Para atualizar tudo de uma vez, vocêterá que usar arrays e foreach(). Veja só:

 

Seu código que monta o form de alteração:

 

<?
$Var_listar_produto = mysql_query("select id_produto, nome_produto, preco_produto, qtd_produto from carrinho where session = '".session_id()."' order by nome_produto asc");
if (mysql_num_rows ($Var_listar_produto)>0){

       $total_compra = 0;
       echo "<form action='cart.php?acao=altera_qtd' method='post'>";

       while ($produto = mysql_fetch_object($Var_listar_produto)){
               $total_compra += ($produto->preco_produto*$produto->qtd_produto);
               echo "<p>Remover: "."<a href='cart.php?acao=del&id=".$produto->id_produto."'>[x]</a>"."</p>";
               echo "<p>Id produto: ".$produto->id_produto."</p>";
               echo "<p>Nome produto: ".$produto->nome_produto."</p>";
               echo "<p>Valor produto: R$ ".number_format($produto->preco_produto,2,",",".")."</p>";
               echo "<p>QTD produto: <input type='text' name='qtd_produto' value='".$produto->qtd_produto."'></div>";
               echo "<input type='hidden' name='id_produto' value='".$produto->id_produto."'>";
               echo "<p>Subtotal produto: R$ ".number_format($produto->preco_produto*$produto->qtd_produto,2,",",".")."</p><hr />";            


       }
       echo "<input type='submit' value='Alterar quantidade'>";
       echo "</font>";
       echo "<p>TOTAL DA COMPRA: R$ ". number_format($total_compra,2,',','.')."</p>";
       echo "<a href='produto.php'><p>Continuar comprando</p></a>";                    
}
?>

 

Preste atenção nesta linha:

 

echo "<p>QTD produto: <input type='text' name='qtd_produto' value='".$produto->qtd_produto."'></div>";

 

Você terá que transformar os inputs que indicam a quantidade de cada produto em um array, com o índice igual ao id do produto em questão. Veja:

 

echo "<p>QTD produto: <input type='text' name='qtd_produto[".$produto->id_produto."]' value='".$produto->qtd_produto."'></div>";

 

Isso fará com que o nome de cada input fique da seguinte maneira:

 

name=]&quot]]

 

Agora, dentro do seu código que insere os dados no BD vocêvai adicionar um foreach(), veja:

 

if ($_GET['acao']=="altera_qtd"){

              foreach($_POST["qtd_produto"] as $indice => $valor) {

                       $id_produto = addslashes(htmlentities($_POST['$indice']));
                       $qtd_produto = addslashes(htmlentities($_POST['$valor']));

                       mysql_query ("update carrinho set qtd_produto = '".$qtd_produto."' where id_produto = '".$id_produto."' and session = '".session_id()."'");

               }        
       }

 

Veja que substitui seu if() por um foreach(). Dessa forma, ele vai pegar cada qtd_produto e vai atualizar o BD de acordo com o índice.

 

Espero que tenha entendido.

 

Falo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz as mudanças, mas não tá atualizando e nem está dando erro, mesmo colocando um mysql_error(), certamente ele não tá conseguindo recuperar os dados para atualizar no banco de dados, também não consigo escrever os valores (id e quantidade do produto) pra ver se os valores estão realmente sendo passados...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para debug, troque isto.

mysql_query ("update carrinho set qtd_produto = '".$qtd_produto."' where id_produto = '".$id_produto."' and session = '".session_id()."'");

 

Por isto.

$sql = "update carrinho set qtd_produto = '".$qtd_produto."' where id_produto = '".$id_produto."' and session = '".session_id()."'"
echo $sql;
mysql_query ($sql) or die(mysql_error());

 

Veja o que está imprimindo.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Descobri o problema, como o valor foi pego usando o foreach (Essa atribuição dos valores usando foreach é uma espécie de array?) eu não poderia fazer o tratamento no post ($_POST['valor']) e sim na variável $indice e $valor

 

$id_produto = addslashes(htmlentities($indice));
$qtd_produto = addslashes(htmlentities($valor));

E como o problema foi resolvido vou postar o código do ( cart.php // carrinho de compras ) caso alguém queira usar e implementar este carrinho de compras...

 

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

if (isset($_GET['acao'])){
// AQUI ADICIONO UM PRODUTO NO CARRINHO
	if ($_GET['acao']=="add"){	
	
		if (isset($_GET['id'])){
		
			if(is_numeric($_GET['id'])){
						
				$id_produto = addslashes(htmlentities($_GET['id']));
				
				if (mysql_num_rows(mysql_query("select nome_produto from carrinho where id_produto = '".$id_produto."' and session = '".session_id()."'")) == "0"){
				
					$Var_prod = mysql_query ("select id_produto, nome_produto, preco_produto from produto where id_produto = '".$id_produto."' ");
				
					if (mysql_num_rows ($Var_prod)>"0"){
						$produto = mysql_fetch_object($Var_prod);
						$Var_add_produto = mysql_query("insert into carrinho 
						(id_produto, nome_produto, preco_produto, qtd_produto, session) 
						values 
						('$id_produto','".$produto->nome_produto."','".$produto->preco_produto."', '1', '".session_id()."')");
						
					}
				}
			
			}
		
		}
		
	}
	// AQUI DELETO UM PRODUTO DO CARRINHO
	if ($_GET['acao']=="del"){

		if (isset($_GET['id'])){
		
			if (is_numeric($_GET['id'])){
				
				$id_produto = addslashes(htmlentities($_GET['id']));
				mysql_query("delete from carrinho where id_produto = '".$id_produto."'");
			
			}
			
		}
	
		
	}
	// AQUI ALTERO A QUALIDADE DE PRODUTOS DO CARRINHO
	if ($_GET['acao']=="altera_qtd"){
		
		foreach($_POST['qtd_produto'] as $indice=>$valor){	
			
			$id_produto = addslashes(htmlentities($indice));
			$qtd_produto = addslashes(htmlentities($valor));

		
			mysql_query ("update carrinho set qtd_produto = '".$qtd_produto."' where id_produto = '".$id_produto."' and session = '".session_id()."'");
			echo mysql_error();

			
		}
	
	}


}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Carrinho de compras</title>
</head>
<body>

<h1>Carrinho de compras</h1>

<?
$Var_listar_produto = mysql_query("select id_produto, nome_produto, preco_produto, qtd_produto from carrinho where session = '".session_id()."' order by nome_produto asc");
if (mysql_num_rows ($Var_listar_produto)>0){

	$total_compra = 0;
	echo "<form action='cart.php?acao=altera_qtd' method='post'>";
	
	while ($produto = mysql_fetch_object($Var_listar_produto)){
		$total_compra += ($produto->preco_produto*$produto->qtd_produto);
		echo "<p>Remover: "."<a href='cart.php?acao=del&id=".$produto->id_produto."'>[x]</a>"."</p>";
		echo "<p>Id produto: ".$produto->id_produto."</p>";
		echo "<p>Nome produto: ".$produto->nome_produto."</p>";
		echo "<p>Valor produto: R$ ".number_format($produto->preco_produto,2,",",".")."</p>";
		echo "<p>QTD produto: <input type='text' name='qtd_produto[".$produto->id_produto."]' value='".$produto->qtd_produto."'></div>";
		echo "<input type='hidden' name='id_produto' value='".$produto->id_produto."'>";
		echo "<p>Subtotal produto: R$ ".number_format($produto->preco_produto*$produto->qtd_produto,2,",",".")."</p><hr />";		
		

	}
	echo "<input type='submit' value='Alterar quantidade'>";
	echo "</font>";
	echo "<p>TOTAL DA COMPRA: R$ ". number_format($total_compra,2,',','.')."</p>";
	echo "<a href='produto.php'><p>Continuar comprando</p></a>";			
}
?>

</body>
</html>

E Matias, valeu pela sua dica eu nunca pensei em usar essa forma que você me passou pra descobrir erros, eu sempre uso mysql_error() ou mando imprimir determinadas variáveis... achei interessante...

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.