Ir para conteúdo

Arquivado

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

Carcleo

limpar array

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.