TrymBeast 0 Denunciar post Postado Maio 18, 2005 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
ava.rj 0 Denunciar post Postado Maio 18, 2005 Como você está recuperando o valor? $_POST ? Compartilhar este post Link para o post Compartilhar em outros sites
TrymBeast 0 Denunciar post Postado Maio 19, 2005 Como você está recuperando o valor? $_POST ? <{POST_SNAPBACK}> $_GET (pelo endereço) Compartilhar este post Link para o post Compartilhar em outros sites
ava.rj 0 Denunciar post Postado Maio 19, 2005 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
Illidan 0 Denunciar post Postado Maio 19, 2005 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
TrymBeast 0 Denunciar post Postado Maio 20, 2005 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
ava.rj 0 Denunciar post Postado Maio 20, 2005 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
TrymBeast 0 Denunciar post Postado Maio 23, 2005 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
red neck * 0 Denunciar post Postado Maio 23, 2005 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