Carcleo 4 Denunciar post Postado Julho 29, 2011 Ola pessoal. Tenho o código abaixo de um carrinho de compras. Quando o cliente marca varios produtos e envia todos, eu crio uma matriz de filtro para saber o valor do campo name="marcado" que é uma checkbox de cada produto que o $_post do form enviou. Dai eu filtro o array $_post por valor de marcado=On e com os produtos enviados marcado=On, eu faço uma matriz $dados. Depois, eu jogo essa matriz para o carrinho propriamente dito. O meu problema é que, caso o cliente marque 3 produtos e depois ele decida voltar e marcar outro produto, o array dados não envia esse outro. O que eu devo fazer para resolver isso? Acho que devo ao final do lançamento no carrinho zerar o array $_post e depois enche-lo de novo. Seria isso? Se sim, como fazer isso? $dados = filtrar_array_por_valor($_POST, 'marcado', 'on'); // trocar o for para for each -> para cada indice da array, faça a inserção. for( $i = 0; $i <= count( $dados ); $i++ ) { if ($dados[ $i ] [ 'condicao' ]=="#" ) { echo '<script> alert("Posição não foi seleciona. \n Por favor, volte selecione!"); document.location="produto_lista_cadastrar.php?acao=mostra_produtos&id_fornece='.$id_fornece.'"; </script>'; break; } if( !empty( $dados[ $i ] [ 'id_prod' ] ) ) { $Query = sprintf( 'SELECT id FROM produtos WHERE id = %d', $dados[ $i ] [ 'id_prod' ] ); $R_Query = $MySQL->query( $Query ); if( mysql_num_rows( $R_Query ) > 0 ) { $preco_calculado = (($dados[ $i ] [ 'novo_imposto' ] * $dados[ $i ] [ 'novo_preco' ]) / 100 ) + $dados[ $i ] [ 'novo_preco' ]; $MeuCarrinho->AdicionarItem( $dados[ $i ] [ 'id_prod' ], 1 , $dados[ $i ] [ 'novo_imposto' ], $preco_calculado, $dados[ $i ] [ 'condicao' ] ); } } } /* delete($dados); $dados= array(); print_r($dados); */ } Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 29, 2011 Bom. Fiz assim: $dados=null; Funcionou, limpou a array. Porem, surgiu outro problema: Quando, após declarar a array dados como sendo o filtro do post, dou um print_r no $dados e imprime direitinho. Porem, quando vejo dentro do for, o $dados [$i] ['id_prod'] não imprime. O que será que esta de errado? $dados = filtrar_array_por_valor($_POST, 'marcado', 'on'); print_r($dados); // trocar o for para for each -> para cada indice da array, faça a inserção. for( $i = 0; $i <= count( $dados ); $i++ ) { print $dados[ $i ] [ 'id_prod' ]; if ($dados[ $i ] [ 'condicao' ]=="#" ) { echo '<script> alert("Posição não foi seleciona. \n Por favor, volte selecione!"); document.location="produto_lista_cadastrar.php?acao=mostra_produtos&id_fornece='.$id_fornece.'"; </script>'; break; } if( !empty( $dados[ $i ] [ 'id_prod' ] ) ) { $Query = sprintf( 'SELECT id FROM produtos WHERE id = %d', $dados[ $i ] [ 'id_prod' ] ); $R_Query = $MySQL->query( $Query ); if( mysql_num_rows( $R_Query ) > 0 ) { $preco_calculado = (($dados[ $i ] [ 'novo_imposto' ] * $dados[ $i ] [ 'novo_preco' ]) / 100 ) + $dados[ $i ] [ 'novo_preco' ]; $MeuCarrinho->AdicionarItem( $dados[ $i ] [ 'id_prod' ], 1 , $dados[ $i ] [ 'novo_imposto' ], $preco_calculado, $dados[ $i ] [ 'condicao' ] ); } } } $dados = null; O print_r($dados) imprime (no exemplo usado): Array ( [2] => Array ( [id_prod] => 6 [novo_preco] => 3.20 [novo_imposto] => 0 [marcado] => on [condicao] => 1 ) ) Mas o print $dados[ $i ] [ 'id_prod' ] dentro do for não imprime nada e ainda nõ chegou no $dados=null. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Julho 29, 2011 Use foreach no lugar de for. Motivo: Você está tentando acessar uma posição($dados[ 0 ] [ 'id_prod' ], $dados[ 1 ] [ 'id_prod' ]) que não existe, por isso da pau. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Julho 30, 2011 Pois é. Alterei para foreach e entendi (aprendi) o porque do problema. Mas agora tenho outro problema. Quando adiciono ítens ao carriho e percebo, por exemplo, que um ítem a quantidade esta errada e excluo ele do carrinho, ele sai do carrinho normal. Porem, quando volto nna lista e tento inserir o produto com o mesmo id de novo, mesmo que ele tenha sido deletado do carrinho, ele não adiciona ao carrinho de novo. Como posso resolver isso? $dados = filtrar_array_por_valor($_POST, 'marcado', 'on'); print_r($dados); foreach ($dados as $valor) { if ($valor[ 'condicao' ]=="#" ) { echo '<script> alert("Posição não foi seleciona. \n Por favor, volte selecione!"); document.location="produto_lista_cadastrar.php?acao=mostra_produtos&id_fornece='.$id_fornece.'"; </script>'; break; } if( !empty( $valor[ 'id_prod' ] ) ) { $Query = sprintf( 'SELECT id FROM produtos WHERE id = %d', $valor[ 'id_prod' ] ); $R_Query = $MySQL->query( $Query ); if( mysql_num_rows( $R_Query ) > 0 ) { $preco_calculado = (($valor[ 'novo_imposto' ] * $valor[ 'novo_preco' ]) / 100 ) + $valor[ 'novo_preco' ]; $MeuCarrinho->AdicionarItem( $valor[ 'id_prod' ], 1 , $valor[ 'novo_imposto' ], $preco_calculado, $valor[ 'condicao' ] ); } } } Pode deixar. La no carrinho não estava retirando o vetor codigo. Só a quantidade. /* RemoverItem Este metodo remove um item do carrinho de compra, passando o codigo do produto */ function RemoverItem($codigo) { //Inicializando parametro $posicao = -1; $achou = $this->ObtemPosicao($codigo,$posicao); if ($achou){ //Removendo o elemento do vetor array_splice($this->item_quantidade, $posicao, 1); array_splice($this->item_codigo, $posicao, 1); } } /* RemoveItem() */ valeu. Compartilhar este post Link para o post Compartilhar em outros sites