Ir para conteúdo

Arquivado

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

Carcleo

função para validar checkbox

Recommended Posts

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

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

×

Informação importante

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