Carcleo 4 Denunciar post Postado Setembro 9, 2012 Pessoal, preciso saber como faço para, ao final de um loop foreach, em que a cada volta do loop, se faça uma busca (omparação), caso nenhuma das buscas tenha retorno, aí farei um delete dasquele registro. Bom, o loop é esse: foreach($estoques_a_deletar as $deleta) { print "Cor: ".$deleta[1]." - ".$cores_produtos." Tamanho ".$deleta[2]." - ".$tamanhos_produtos."<br>"; if(!(($deleta[1]==$cores_produtos) and ($deleta[2]==$tamanhos_produtos))) { $deleta_estoque_string="delete from estoque where id_estoque=".$deleta[0]; print $deleta_estoque_string."<br>"; //$deleta_estoque_query= $conexao->query($deleta_estoque_string); } } Esse loop esta dentro de um outro loop foreach que entrega, a cada volta, um valor para $cores_produtos e $tamanhos_produtos, que devem ser comparados com $deleta[1] e $deleta[2] consecutivamente. E, se em nehum laço, houver a combinação, aí faço o delete do registro. Como fazer isso? Segue o codigo todo: $pesquisa_cor_tamanho_string = "select id_estoque, id_cor, id_tamanho from estoque where id_produto=".$_POST["id_alt_produtos"]; $pesquisa_cor_tamanho_query = $conexao->query($pesquisa_cor_tamanho_string); if ($pesquisa_cor_tamanho_query->num_rows!=0) { $estoques_a_deletar=array(); while($row = $pesquisa_cor_tamanho_query->fetch_row()) {$estoques_a_deletar[] = array_values($row); } } $estoque_a_deletar = array(); foreach ($_POST["cores_alt_produtos"] as $cores_produtos) { foreach ($_POST["tamanhos_alt_produtos"] as $tamanhos_produtos) { array_push($estoque_a_deletar,$cores_produtos); array_push($estoque_a_deletar,$tamanhos_produtos); $pesquisa_cores_tamanhos_string = "select id_cor, id_tamanho, id_estoque from estoque where id_cor=".$cores_produtos." and id_tamanho=".$tamanhos_produtos." and id_produto=".$_POST["id_alt_produtos"]; $pesquisa_cores_tamanhos_query = $conexao->query($pesquisa_cores_tamanhos_string); if ($pesquisa_cores_tamanhos_query->num_rows==0) { $insere_cor_tamanho_string= "insert into estoque (id_produto, id_cor, id_tamanho) values (".$_POST["id_alt_produtos"].",".$cores_produtos.",".$tamanhos_produtos.")"; } print $pesquisa_cores_tamanhos_string."<br>"; //$insere_cor_tamanho_query = $conexao->query($insere_cor_tamanho_string); if(isset($estoques_a_deletar)) { foreach($estoques_a_deletar as $deleta) { print "Cor: ".$deleta[1]." - ".$cores_produtos." Tamanho ".$deleta[2]." - ".$tamanhos_produtos."<br>"; if(!(($deleta[1]==$cores_produtos) and ($deleta[2]==$tamanhos_produtos))) { $deleta_estoque_string="delete from estoque where id_estoque=".$deleta[0]; print $deleta_estoque_string."<br>"; //$deleta_estoque_query= $conexao->query($deleta_estoque_string); } } } } } Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Setembro 10, 2012 Veja: tenho para cada indice do array, sub indices 0,1 e 2. Então, não sei bem com fazer nesse caso. Pensei em fazer um inidce para um novo array push tal como a cada laço do indice 1, crio o indice 1 do array id_a_deletatr[0]. a cada laço do indice 2, crio o indice 1 do array id_a_deletatr[1]. Depois, faço um for nesse array e, o indices que tiverem true eu faço a deleção. Mas não funcionou. O negocio é o seguinte: Para cada produto eu tenho varias combinações cor/tamanho. Na alteração desse produto, preciso filtrar 3 coisas: A) Os indices que vieram do formulario e que não estão na base -> Esses, tenho que gravar => Consegui A) Os indices que vieram do formulario e que estão na base -> Esses, NÃO tenho que gravar => Consegui C) Os indices que que tem no base de dados mas que NÃO estão no formulario ->, Esses, preciso deletar. => NÃO consegui Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Setembro 10, 2012 oi @Carcleo, isso é um sistema de checkboxs ? você tem um produto, e está selecionando ou tirando a seleção de varios checkboxs, e precisa atualizar na base. É isso ? Olhe uma forma muito simples: 1. Delete tudo. 2. Grave tudo novamente. Pronto. você não precisa saber quem estava, e quem não estava. Limpe e depois grave tudo novamente. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Setembro 10, 2012 Pois é. Poderia fazer isso. Mas não posso. Porque? Há estoques gravados lá. Se eu deletar, o estoque some. Entendeu? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Setembro 10, 2012 Então você não entendeu. você pode sim. Delete apenas os checkboxs do registro que você está editando. Para depois gravá-los todos novamente. Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Setembro 10, 2012 Bom, vou tentar simplificar. Tenho essa array: Array1 ( [0] => Array ( [0] => 1 [1] => 1 [2] => 1 ) [1] => Array ( [0] => 2 [1] => 3 [2] => 1 ) [2] => Array ( [0] => 3 [1] => 1 [2] => 5 ) [3] => Array ( [0] => 4 [1] => 3 [2] => 5 ) ) E essa: Array2 ( [0] => 1 [1] => 1 [2] => 1 [3] => 5 ) Preciso saber quantas combinações há de cada indice primario do primeiro array em seus subindices 1 e 2, com cada sequencia 0,1; 2,3 do segundo array. Tipo assim: comparar o array1[1] com array2[1] e array1[2] com array2[2] Se não houver combinaçao, comparar array1[1] com array2[3] e array1[2] com array2[4] E assim conscutivamente. É isso que preciso fazer e não estou conseguindo. Porem, isso tem quew ser dinamico. Não pode ser da forma qe fiz acima pois haverá uma hora que um array terá maior quantidade e indices. Tentei fazer da forma abaixo mas não deu certo: if(isset($estoque_a_deletar_base)) { $deleta = false; foreach ($estoque_a_deletar_base as $base_a_deletar) { $indice = 0; for ($i=1; $i<=count($estoque_a_deletar_form)/2; $i++) { print "cor base: ".$base_a_deletar[1]." - cor form: ".$estoque_a_deletar_form[$i]." - tamanho base: ".$base_a_deletar[2]." - tamanho form: ".$estoque_a_deletar_form[$indice+1]."<br>"; if($base_a_deletar[1]==$estoque_a_deletar_form[$indice] and $base_a_deletar[2] == $estoque_a_deletar_form[$indice+1]) { $deleta=true; } $indice = $indice+2; } print "Deleta: ".$deleta."<br>"; if ($deleta==false) { $deleta_estoque_string = "delete from estoque where id_estoque=".$base_a_deletar[0]; } } } Compartilhar este post Link para o post Compartilhar em outros sites