Ir para conteúdo

POWERED BY:

Arquivado

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

michelmfreitas

Carrinho de Compras

Recommended Posts

Olá pessoal,

 

Estou fazendo um sistema de carrinho em que atualizo o carrinho via javascript + php.

 

Tenho uma função JS que chama uma função em PHP para apagar um item do carrinho:

function ApagaItemCarrinho(id, idcarrinho){
$.post("index.php", { classe:"Carrinho", metodo: "apagar", id: id, idcarrinho: idcarrinho },
	function(data) {
		alert(data);
		$("#Carrinho"+id).fadeOut("slow", function() { $(this).remove(); });
});
}

 

Gostaria que atualizasse o meu valor total assim que apagasse algum item, mostrando o valor atual.

 

Porém, no retorno DATA, ele imprime apenas o array que enviei (id e idcarrinho), sem retornar o TOTAL, de acordo com a função PHP abaixo.

 

function apagar($dados){
	//$this->DB->Execute("DELETE FROM carrinho_produtos WHERE idproduto = {$dados['id']}");
	$rs = $this->DB->GetArray("SELECT * FROM carrinho_produtos WHERE idcarrinho = {$dados['idcarrinho']}");
	$total = 0;
	foreach($rs as $x){
		$x['adicionais'] = $x['adicionais']==0 ? 1 : $x['adicionais'];
		$total += $x['adicionais']*$x['valor'];
	}
	$this->DB->Execute("UPDATE carrinho SET total = '{$total}' WHERE id = {$dados['idcarrinho']}") or die($this->DB->ErrorMsg());
	return $total;
}

 

Podem me esclarecer? Obrigado!!! =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se você colocasse a função php dentro de uma div e no retorno do javascript você dava um .load nela para recarregar os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem ver a implementação toda, fica complicado.

Mas, você tentou dar um "echo" ao invés de "return"?

 

O retorno no JavaScript é o output gerado pelo processamento da requisição.

Não sei se no seu caso você tem alguma outra classe envolvida que trata o retorno do método da classe para enviar para o browser...

 

 

Se não me fiz entender, dá um toque.

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que não precisa de mais código pra entender este trecho:

 

Ao clicar no botão remover do carrinho, chama a função Javascript ApagaItemCarrinho que passa 2 parametros: o id do produto (id) e o id do carrinho (idcarrinho).

 

Nessa função, o JS faz uma requisição na página INDEX.PHP, emitindo como parametros via POST a classe CARRINHO, o metodo APAGAR, o ID e o ID CARRINHO.

 

Na página index é criado o obejto que invoca o metodo, e fazendo todos os procedimentos corretos. Para retornar o valor do total, faço um RETURN $TOTAL (com o total atualizado).

 

O javascript deveria jogar esse retorno dentro de DATA, assim eu faria aparecer lá onde quero.

 

Porém, o javascript NÃO RETORNA o total, e sim, um array com ID e IDCARRINHO. O total só aparece se eu substituir o RETURN pelo ECHO, mas, mesmo assim, o TOTAL vem precedido do ARRAY informado acima.

 

Será que consegui ser bem claro quanto ao funcionamento? Acho até tranquilo fazer, porém posso estar pecando em algo que não consigo identificar, amigos.

 

Obrigado pelo ajuda ae! :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja,

 

É exatamente por não ter o código que faz o tratamento da chamada a classe que não é possível encontrar a solução.

Por exemplo, de onde está saindo este Array? Qual método está sendo responsável por retorná-lo?

 

Me parece, que deve ter algum "print_r" ou "var_dump" no meio, que está gerando a saída.

 

Pelo que pude compreender, o arquivo index.php cria a instancia da classe e processa o método requisitado.

Porém, o que é feito com o retorno do método?.

 

Isto não é claro sem os códigos ;)

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi. No arquivo index.php tem:

 

if($_POST['classe']){

   $classe = $_POST['classe'];
   array_shift($_POST);
   $metodo = $_POST['metodo'];
   array_shift($_POST);

   $objeto = new $classe();
   $objeto->$metodo($_POST);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me parece que estas chamadas ao array_shift, são desnecessárias.

Se você quer remover os dois primeiros indices porque eles são "classe" e o "metodo", eu utilizaria unset:

 

unset($_POST['classe'],$_POST['metodo']);

 

Mas, para poder enviar para o browser o retorno dos métodos, só chame um "echo" na chamada da função:

 

echo $objeto->$metodo($_POST);

.

 

E deixe a função com return mesmo.

 

Ainda assim, não resolve o "mistério do array", pois no código que você enviou não deveria ter nenhuma saída.

Veja se em algum outro ponto do seu código você não tem um print_r, var_dump ou algo do gênero, nem está dando um "echo" em um Array.

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem um endereço para acessar?

Se quiser, mande o endereço por PM.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, neste caso, recomendo utilizar o xDebug ou ZendDebugger, para poder encontrar de forma mais fácil de onde está vindo esta saida.

 

Tente instalar um dos dois e debugar a aplicação linha-a-linha.

 

@braços e fique com Deus!

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se você colocasse a função php dentro de uma div e no retorno do javascript você dava um .load nela para recarregar os dados.

Isso seria perda de processamento, e totalmente incorreto.

 

porém, o que está acontecendo é que o javascript não está pegando o retorno do PHP.

Você já fez um debug em 'data' pra ver o que está retornando ?

Acredito que não precisa de mais código pra entender este trecho

 

Precisamos sim !, Poste o trecho da sua index que chama tal método

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente utilizar json para o transporte de dados

 

function ApagaItemCarrinho(id, idcarrinho){
$.post("index.php", { classe:"Carrinho", metodo: "apagar", id: id, idcarrinho: idcarrinho },
	function(data) {
		alert(data.total);
		$("#Carrinho"+id).fadeOut("slow", function() { $(this).remove(); });
}, 'json');
}

 

 

function apagar($dados){
	//$this->DB->Execute("DELETE FROM carrinho_produtos WHERE idproduto = {$dados['id']}");
	$rs = $this->DB->GetArray("SELECT * FROM carrinho_produtos WHERE idcarrinho = {$dados['idcarrinho']}");
	$data['total'] = 0;
	foreach($rs as $x){
		$x['adicionais'] = $x['adicionais']==0 ? 1 : $x['adicionais'];
		$data['total'] += $x['adicionais']*$x['valor'];
	}
	$this->DB->Execute("UPDATE carrinho SET total = '{$total}' WHERE id = {$dados['idcarrinho']}") or die($this->DB->ErrorMsg());
	echo json_encode($data);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Rafael Fiori, consegui utilizando Json sim, muito obrigado.

 

Porém, agora preciso atualizar o valor de uma variável no PHP com Jquery.

O total atualiza no site, porém o valor da variável $total continua com valor antigo.

 

É possível?

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.