Ir para conteúdo

Arquivado

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

TrymBeast

Carrinho de compras

Recommended Posts

Olá!Queria pedir-vos ajuda numa coisa, eu fiz um carrinho de compras, mas sempre que adiciono algum artigo no carrinho, se usar o botão de retroceder e depois o de avançar, a quantidade aumenta porque a programação php está feita de maneira a se alguém quiser adicionar um artigo que já esteja no carrinho de compras a quantidade do artigo aumenta, mas por causa disso agora tenho este "bug" para resolver.Alguém me dá umas dicas? Estou sem ideias.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deve ser por issso. Use o método POST para passar a variável. Qdo você carrega a página novamente a variável é passada denovo pela URL.Acho q é isso[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o seu código está armazenando os itens que já foram adicionados no carrinho? Deve ser através de sessão ou cookies... veja o ponto do código que ele adiciona um item ao carrinho. Aí você faz uma verificação se esse item já existe antes de incluir novamente.

 

Até mais!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o seu código está armazenando os itens que já foram adicionados no carrinho? Deve ser através de sessão ou cookies... veja o ponto do código que ele adiciona um item ao carrinho. Aí você faz uma verificação se esse item já existe antes de incluir novamente.

 

Até mais!

<{POST_SNAPBACK}>

Eu faço essa verificação, mas quando já existe eu fiz para aumentar uma unidade na quantidade, por isso é que aumenta sempre a quantidade. Mas eu queria assim.

 

Deve ser por issso. Use o método POST para passar a variável. Qdo você carrega a página novamente a variável é passada denovo pela URL.

 

Acho q é isso

 

[]s

<{POST_SNAPBACK}>

Mas seu eu fizer com post o browser vai perguntar se desejo reenviar os dados, e se a pessoa disser que sim, vai acontecer o mesmo, não é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas seu eu fizer com post o browser vai perguntar se desejo reenviar os dados, e se a pessoa disser que sim, vai acontecer o mesmo, não é?

<{POST_SNAPBACK}>

Só vendo o código pra saber ... bote uma parte dele aí ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui vai.

if(!empty($_GET['action'])) {	switch($_GET['action']) { 	   /* ADICIONAR PRODUTO NO CARRINHO */  case 'adicionar': 	 if(!empty($_GET['id_prod'])) {    /* VALIDAÇÃO DE PRODUTO */      //Muda o tipo de id_prod para integer, para eliminar todos os dados que alguém mal intencionado tente passar    settype($_GET['id_prod'], 'integer');      //Verifica se o id_prod não está vazio depois da conversão para integer    if(!empty($_GET['id_prod'])) {   	 /* Fazendo a query SQL*/   	 $_ENV['query'] = "SELECT * FROM produtos WHERE id_produto = '" . $_GET['id_prod'] . "'";   	 $_ENV['result'] = mysql_query($_ENV['query']) or die("A query falhou: " . mysql_error()); 	    	 //Verifica se há 1 resultado para aquele produto   	 if(mysql_num_rows($_ENV['result']) == 1) $_ENV['pagina'] = 'produto';   	 else {      echo erro(ERRO_PRODUTO_INEXISTENTE) . '<br><br>';      $_GET['id_prod'] = '';   	 }	   	 /* Liberando o resultado */   	 mysql_free_result($_ENV['result']);    } else {   	 echo erro(ERRO_PRODUTO_INEXISTENTE) . '<br><br>';   	 $_ENV['id_prod'] = '';    } 	 } else {    echo erro(ERRO_PRODUTO_INEXISTENTE) . '<br><br>';    $_ENV['id_prod'] = ''; 	 }     	 /* ADICIONA O PRODUTO NO CARRINHO */ 	 if(!empty($_GET['id_prod']))  {    if(empty($_SESSION['carrinho'])) {   	 $_SESSION['carrinho'] = $_GET['id_prod'] . ';';   	 $_SESSION['quantidade'] = '1;';    } else {   	 $_ENV['prod_carrinho'] = explode(';', $_SESSION['carrinho']);   	 $_ENV['prod_quantidade'] = explode(';', $_SESSION['quantidade']);         	 foreach($_ENV['prod_carrinho'] as $_ENV['chave'] => $_ENV['valor']) {      if($_ENV['valor'] == $_GET['id_prod']) {     	 $_ENV['prod_quantidade'][$_ENV['chave']]++;     	 $_ENV['adicionado'] = 'sim';     	 break;      }   	 }         	 if(empty($_ENV['adicionado'])) {      $_SESSION['carrinho'] .= $_GET['id_prod'] . ';';      $_SESSION['quantidade'] .= '1;';   	 } else {      $_SESSION['quantidade'] = '';      foreach($_ENV['prod_quantidade'] as $_ENV['chave'] => $_ENV['valor']) {     	 $_SESSION['quantidade'] .= $_ENV['valor'];     	 if($_ENV['chave'] < count($_ENV['prod_quantidade']) - 1) $_SESSION['quantidade'] .= ';';      }   	 }    } 	 } 	 break;    case 'enviar': 	 $_ENV['erro'] = 0;   	 //verificação de preenchimento 	 if(empty($_POST['txtNome']) && $_ENV['erro']==0) {    $_ENV['codigo'] = erro(ERRO_NOME);    $_ENV['erro'] = 1; 	 } 	 if(empty($_POST['txtMorada']) && $_ENV['erro']==0) {    $_ENV['codigo'] = erro(ERRO_MORADA);    $_ENV['erro'] = 1; 	 } 	 if(empty($_POST['txtCodPostal']) && $_ENV['erro']==0) {    $_ENV['codigo'] = erro(ERRO_POSTAL);    $_ENV['erro'] = 1; 	 } 	 if(empty($_POST['txtTelefone']) && $_ENV['erro']==0) {    $_ENV['codigo'] = erro(ERRO_TELEFONE);    $_ENV['erro'] = 1; 	 } 	 if(empty($_POST['txtEmail']) && $_ENV['erro']==0) {    $_ENV['codigo'] = erro(ERRO_EMAIL);    $_ENV['erro'] = 1; 	 } 	  	 if($_ENV['erro']==0) {    //tratamento às variáveis    $_POST['txtCodPostal'] = trim($_POST['txtCodPostal']);    $_POST['txtEmail'] = trim($_POST['txtEmail']);    $_POST['txtMensagem'] = trim($_POST['txtMensagem']);    $_POST['txtMorada'] = trim($_POST['txtMorada']);    $_POST['txtNome'] = trim($_POST['txtNome']);    $_POST['txtTelefone'] = trim($_POST['txtTelefone']);    $_POST['txtMensagem'] = trim($_POST['txtMensagem']); 	     //validação de informação    if(!validar_email($_POST['txtEmail'])) {   	 $_ENV['codigo'] = erro(ERRO_EMAIL_INCORRECTO);   	 $_ENV['erro'] = 1;    } 	     if($_ENV['erro']==0) {       	 if(!empty($_SESSION['carrinho']))  {      $_ENV['prod_carrinho'] = explode(';', $_SESSION['carrinho']);      $_ENV['prod_quantidade'] = explode(';', $_SESSION['quantidade']);	      /* Fazendo a query SQL*/      $_ENV['query'] = "SELECT * FROM produtos WHERE ";	      $_ENV['i'] = 0;	      foreach($_ENV['prod_carrinho'] as $_ENV['chave'] => $_ENV['valor']) {     	 $_ENV['i']++;     	 if(count($_ENV['prod_carrinho']) != $_ENV['i']) {        if($_ENV['i'] < count($_ENV['prod_carrinho']) - 1) $_ENV['query'] .= "id_produto = '" . $_ENV['valor'] . "' OR ";        else $_ENV['query'] .= "id_produto = '" . $_ENV['valor'] . "' ";     	 }      }	      $_ENV['query'] .= "ORDER BY nome_produto ASC";      $_ENV['result'] = mysql_query($_ENV['query']) or die("A query falhou: " . mysql_error());	      $_ENV['mensagem'] = '';      $_ENV['preco_final'] = 0;      $_ENV['limite'] = 100;            $_ENV['mensagem'] .= CAMPO_NOME . CAMPO_SEPARADOR . ' ' . $_POST['txtNome'] . "\r\n" . CAMPO_MORADA . CAMPO_SEPARADOR . ' ' . $_POST['txtMorada'] . "\r\n" . CAMPO_POSTAL . CAMPO_SEPARADOR . ' ' . $_POST['txtCodPostal'] . "\r\n" . CAMPO_TELEFONE . CAMPO_SEPARADOR . ' ' . $_POST['txtTelefone'] . "\r\n" . CAMPO_EMAIL . CAMPO_SEPARADOR . ' ' . $_POST['txtEmail'];      if(!empty($_POST['txtMensagem'])) $_ENV['mensagem'] .= "\r\n" . CAMPO_OBSERVACOES . CAMPO_SEPARADOR . "\r\n" . $_POST['txtMensagem'];      $_ENV['mensagem'] .=  "\r\n\r\n";            /* Mostrando os resultados em HTML */      while($_ENV['line'] = mysql_fetch_array($_ENV['result'])) {           	 for($_ENV['i'] = 0; $_ENV['i'] < $_ENV['limite']; $_ENV['i']++) $_ENV['mensagem'] .= '-';     	 $_ENV['mensagem'] .= "\r\n";           	 $_ENV['mensagem'] .= CAMPO_PRODUTO . CAMPO_SEPARADOR . ' ' . $_ENV['line']['nome_produto'];	     	 foreach($_ENV['prod_carrinho'] as $_ENV['chave'] => $_ENV['valor']) {        if($_ENV['valor'] == $_ENV['line']['id_produto']) {       	 $_ENV['mensagem'] .= "\r\n" . CAMPO_QUANTIDADE . CAMPO_SEPARADOR . ' ' . $_ENV['prod_quantidade'][$_ENV['chave']];       	 $_ENV['quantidade'] = $_ENV['prod_quantidade'][$_ENV['chave']];        }     	 }       	 $_ENV['mensagem'] .= "\r\n" . CAMPO_PRECO_UNITARIO . CAMPO_SEPARADOR . ' ' . preco_decimal($_ENV['line']['preco_produto']) . MOEDA . "\r\n";           	 $_ENV['preco_final'] = $_ENV['preco_final'] + ($_ENV['line']['preco_produto'] * $_ENV['quantidade']);      }	      if(mysql_num_rows($_ENV['result']) > 0) {     	 for($_ENV['i'] = 0; $_ENV['i'] < $_ENV['limite']; $_ENV['i']++) $_ENV['mensagem'] .= '-';     	 $_ENV['mensagem'] .= "\r\n\r\n" . CAMPO_PRECO_TOTAL . CAMPO_SEPARADOR . ' ' . preco_decimal($_ENV['preco_final']) . MOEDA;      }	      /* Liberando o resultado */      mysql_free_result($_ENV['result']);   	       /* headers adicionais */      $_ENV['headers'] = "To: " . EMPRESA_NOME . "<" . EMPRESA_EMAIL . ">\r\n";      $_ENV['headers'] .= "From: " . $_POST['txtNome'] . "<" . $_POST['txtEmail'] . ">\r\n";      $_ENV['headers'] .= "Cc: " . $_POST['txtEmail'] . " \r\n";      $_ENV['headers'] .= "X-Mailer: PHP/" . phpversion() . "\r\n";      $_ENV['destino'] = EMPRESA_EMAIL; 	       //envia a encomenda      if(mail($_ENV['destino'], ENCOMENDAR_EMAIL_ASSUNTO, $_ENV['mensagem'], $_ENV['headers'])) {     	 $_ENV['codigo'] = '<b class="erro">' . TEXTO_ENCOMENDAR_SUCESSO . '</b>';     	 session_destroy();     	 session_start();      }   	 } else $_ENV['codigo'] = '<b class="erro">' . TEXTO_CARRINHO_VAZIO . '</b>';    } 	 } 	 break;    /* LIMPAR O CARRINHO */  case 'limpar': 	 session_destroy(); 	 session_start(); 	 break;    /* ALTERAR A QUANTIDADE E/OU REMOVER PRODUTO DO CARRINHO*/  case 'actualizar': 	  	 $_ENV['prod_carrinho'] = explode(';', $_SESSION['carrinho']); 	 $_ENV['prod_quantidade'] = explode(';', $_SESSION['quantidade']); 	  	 $_SESSION['carrinho'] = ''; 	 $_SESSION['quantidade'] = ''; 	  	 //Remove produto 	 foreach($_ENV['prod_carrinho'] as $_ENV['chave'] => $_ENV['valor']) {    if($_ENV['chave'] < count($_ENV['prod_carrinho']) - 1) {   	 if(empty($_POST['chk' . $_ENV['valor']])) {      $_SESSION['carrinho'] .= $_ENV['valor'] . ';';      $_SESSION['quantidade'] .= $_ENV['prod_quantidade'][$_ENV['chave']] . ';';   	 }    } 	 } 	  	 $_ENV['prod_carrinho'] = explode(';', $_SESSION['carrinho']); 	 $_ENV['prod_quantidade'] = explode(';', $_SESSION['quantidade']); 	  	 //Actualiza a quantidade 	 foreach($_ENV['prod_carrinho'] as $_ENV['chave'] => $_ENV['valor']) {    if($_ENV['chave'] < count($_ENV['prod_carrinho']) - 1) {   	 settype($_POST['txt' . $_ENV['valor']], 'integer');   	 if(!empty($_POST['txt' . $_ENV['valor']])) $_ENV['prod_quantidade'][$_ENV['chave']] = $_POST['txt' . $_ENV['valor']];    } 	 } 	  	 $_SESSION['quantidade'] = ''; 	 foreach($_ENV['prod_quantidade'] as $_ENV['chave'] => $_ENV['valor']) {    if($_ENV['chave'] < count($_ENV['prod_quantidade']) - 1) $_SESSION['quantidade'] .= $_ENV['valor'] . ';'; 	 } 	 break;	}}

Compartilhar este post


Link para o post
Compartilhar em outros sites

acho que o melhor a ser feito é via sessoes como o Illidan sugeriu, o resto fica meio "inseguro", principalmente se tratando duma loja virtualdepois nos campos é so fazer isso:

<input type="tipo" name="nome" value="<? $nome = (isset($_SESSION["nome"])) ? $_SESSION["nome"] : ""; echo $nome; ?>">

ps: peguei o bonde andando, se eu postei besteira, desculpem[]'s

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.