Carcleo 4 Denunciar post Postado Junho 22, 2011 Pessoal. Boa tarde! Tenho a função abaixo: function filtrar_array_por_valor2($array, $index, $value) { if(is_array($array) && count($array) > 0) { foreach(array_keys($array) as $key) { $temp[$key] = $array[$key][$index]; if ($temp[$key] = $value) { $newarray[$key] = $array[$key]; } } } return $newarray; } $dados = filtrar_array_por_valor2($_POST, 'marcado', on); print_r($dados); A ideia aqui é: Tenho um form que postarei abaixo e ele tem alguns campos. Dente eles, um que é uma checkbox. Por estar dentro de um while, essa checkbox, acada laço do while, ganha um novo name <input type=checkbox name=\"{$i}[marcado]\"> Nisso, quando o form é enviado, a checkbox vira uma array. Eu gostaria de saber, quais checkbox foram maracadas e deletar da array os indices que não foram marcadas. Tentei da forma acima, mas ele retorna todo os índices. Veja o código do form: echo "<form action=\"carrinho.php?op=adicionar\" name=\"adcionaumaum[$id]\" method=\"post\">"; $i=0; while(list($id, $nome_produto, $preco, $foto, $quantidadecaixa, $descricao, $nome_fornecedor, $razao_fornecedor, $idfornece,$nome_grupo) = mysql_fetch_row($sql2)){ echo "<input type=\"hidden\" name=\"id_prod\" value=\"$id\"> <input type=\"hidden\" name=\"id_fornece\" value=\"$id_fornece\">"; include("../global/funcoes_php/foto_ver.php"); $icone = "<img border=0 src=../img/saiba_mais.png alt='Saiba Mais'>"; echo "<tr> <td align=center>$foto2</td> <td align=let>$nome_produto</td> <td align=let>$nome_grupo</td> <td align=center><a href='?acao=saibamais&id=$id&id_fornece=$id_fornece'>$icone</a></td> <td align=right>$quantidadecaixa</td> <td align=left>R$ <input type=\"text\" name=\"{$i}[novo_preco]\" id=\"{$i}[novo_preco]\" value=\"$preco\" size=\"08\" style=\"text-align:right\" onKeyPress=\"return(MascaraMoeda(this,'','.',event))\"></td> <td align=center> <input type=\"text\" name=\"{$i}[novo_imposto]\" id=\"{$i}[novo_imposto]\" value=\"0\" size=\"08\" style=\"text-align:center\" onKeyPress=\"BloqueiaLetras();\"> %</td> <input type=\"hidden\" name=\"{$i}[preco_novo]\" id=\"{$i}[preco_novo]\" value=\"\"> <td align=let><input type=checkbox name=\"{$i}[marcado]\"></td> <td align=center valign=\"middle\"> <a href=\"#\" onclick=\"this.href=' carrinho.php?op=adicionar&id_produto=$id&id_fornece=$id_fornece&imposto='+document.getElementById('{$i}[novo_imposto]').value+'&novopreco='+calculo(document.getElementById('{$i}[novo_preco]').value,document.getElementById('{$i}[novo_imposto]').value);\" > Enviar </a> </td> </tr>"; $i++; } echo " <tr> <td align=center valign=\"middle\" colspan=8 height=50> <input type=\"submit\" value=\"Enviar todos os ítens\"> </td> </tr> </table> </form> "; } ?> tenho ma função que verifica campos enviados por POST mas que seus campos rodam dentro de um while. Desta forma, quando enviados, esses campos viram um array de campos. Um deles, é uma checkbox. então o array se compõe de todos os campos enviados. E, este array, em cada linha do while, ganha um índice. Daí, quando esse form é enviado, gotaria de filtrar quais laços do while foram enviados, filtrando pelo checkbox que foi maracado. ou seja, se o checkbox foi maracado, os outros campos do form me interessam, se não foi maracado, nõ interessam. A funçao é essa: <? function filtrar_array_por_valor($array, $index, $value) { if(is_array($array) && count($array) > 0) { foreach(array_keys($array) as $key) { $temp[$key] = $array[$key][$index]; if ($temp[$key] = $value) { $newarray[$key] = $array[$key]; } } } return $newarray; } ?> Estou chamando ela assim: $dados = filtrar_array_por_valor($_POST, 'marcado', 'on'); print_r($dados); Mas, mesmo assim não esta filtrando. Onde esta o erro? O problema estava aqui: Não é assim: if ($temp[$key] = $value) { é assim: if ($temp[$key] == $value) { Grato a todos Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 22, 2011 Não precisa disso amigo, o browser só envia pelo POST os itens que estão marcados, veja um exemplo: <form method="POST"> <?php for( $i; $i <= 11; ++$i ){ if( $i %2 == 0 ){ printf( '<b>Sim</b><input type="%s" name="marcado[]" value="Sim->%s" /><br />', 'checkbox', $i, 'Sim' ); }else{ printf( '<b>Não</b><input type="%s" name="marcado[]" value="Não->%s" /><br />', 'checkbox', $i, 'Não' ); } } ?> <input type="submit" value="Enviar" name="enviar" /> </form> <?php if( isset( $_POST[ 'enviar' ] ) ){ echo '<pre>'; print_r( $_POST ); } ?> Marquei todos os checkboxe's com 'Sim', a saída: Array ( [marcado] => Array ( [0] => Sim-> [1] => Sim->2 [2] => Sim->4 [3] => Sim->6 [4] => Sim->8 [5] => Sim->10 ) [enviar] => Enviar ) Depois marquei todos com 'Não', saída: Array ( [marcado] => Array ( [0] => Não->1 [1] => Não->3 [2] => Não->5 [3] => Não->7 [4] => Não->9 [5] => Não->11 ) [enviar] => Enviar ) ;) Compartilhar este post Link para o post Compartilhar em outros sites