Ir para conteúdo

POWERED BY:

Arquivado

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

Bruno Augusto

Nunca mais tenha problema com checkbox...

Recommended Posts

Você já teve problemas com campos de formulário do tipo checkbox? Principalmente quando precisou utilizar, talvez em algum condicional, uma confirmação gerada por um checkbox que não foi assinalado?

 

Você já deixou de usar checkbox porque não aguentava fazer parte do seu código praticamente dobrar de tamanho só para confirmar se o checkbox desejado foi enviado ou não?

 

Pior, você já optou por usar dropdown de múltipla seleção só porque os checkboxes não te obedeciam?

 

Isso é um problema comum que inclusive já afetou a mim no passado e, hoje, desenvolvendo um formulário com checkboxes lembrei e resolvi ajudar quem mais precisa.

 

O fato é que elementos do tipo checkbox que não são assinalados antes do envio, não são, de fato, enviados ao programa PHP receptor.

 

Muitas vezes isso gera confusão ou obriga o pogramador programador a recorrer a JavaScript's mirabolantes apenas para, por exemplo, passar o valor de um checkbox não assinalado como zero.

 

A solução, simples, elegante e que em nada afeta a saúde, nem do programador e nem do script, consiste apenas em adicionar um elemento hidden com o mesmo valor do atributo name que dito checkbox ANTES do respectivo checkbox.

 

Quando enviado, pelo processamento "de cima a baixo", o primeiro valor a ser considerado na "fila" de envio será o hidden.

 

Continuando o processamento do formulário, se o checkbox de mesmo nome tiver sido assinalado, a entrada anterior, referente ao hidden, será sobrescrita com o valor do checkbox selecionado.

 

Caso contrário, por não estar assinalado, o processamento "pula" para opróximo elemento e o valor do hidden é mantido.

 

Mas como sempre há os Do Contra da Turma da Mônica do iMasters poderá haver a questão:

 

"O que há de errado com..."

 

$_POST['checkbox'] = (isset($_POST['checkbox'])) ? 1 : 0;

Tão simples quanto o ternário acima exposto é a aplicabilidade alternativa da técnica que remete a quando NÃO SE SABEM quantos checkboxes haverão de existir.

 

Ou ainda, manter seu código mais limpo pois, imagine um jogo de Campo Minado, com tabuleiro de 100x100 checkboxes.

Você realmente vai repetir essa linha 10 mil vezes? Ou vai realmente aplicar um loop desnecessário e que potencialmente te proporcionará um tempo de resposta considerável e irritantemente alto, por nada?

 

Bom, fica a dica http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum... interessante..

 

mas assim, não 'querendo ser do Contra' e nem nada.. mas e pra que você precisa dos checkboxs não marcados ?

 

Em todas as modelagens que já fiz, se eles não estão marcados, então o user não precisa deles, logo, eu e minha aplicação(banco de dados, regras de negócio), também não precisamos.

 

Tem algum exemplo, em que lhe foi interessante, sujar o código HTML, só para receber também os checks não marcados ?

Por exemplo, se for usar apenas para algo como 'Desejo receber esse informativo?'

 

E estiver trabalhando numa pegada OO, o interessante é deixar essa validação à cargo do teu método setter lá... não era ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo, que aconteceu comigo um tempo atrás, foi a criação de um formulário onde, através de N checkboxes, eu definiria permissões de acesso à usuários de um grupo, quase no mesmo estilo do presente no painel administrativo do Fórum.

 

Como são muitos checkboxes e nem sempre na mesma quantidade, ficaria estranho ou até mesmo desnecessário um loop para determinar zeros e uns.

 

Dessa forma, sempre tenho a mesma estrutura no array vindo do formulário, facilitando o trabalho de quem tratará e validará as informações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente é interessante para edição. Nesse caso, não é necessário remarcar a categoria de um texto, por exemplo. MAS, se for necessário TROCAR DE CATEGORIA, aí fica impossível. Sempre prevalece o hedden da publicação original.

 

Também não concordo com a crítica aos que discordam, se o fizerem com fundamento. Discordar é democrático. Devemos estimular o debate. Nunca silenciá-lo. A menos que se queira colocar as liberdades no lixo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno, salvou meu resto de feriado. Um exemplo prático onde preciso saber se o check foi marcado ou não:

 

Tenho um input text no formulário, abaixo dele outro input text e um checkbox. 

 

Algo como

nome: ______________

pula para: ___________    [ ] encerrar

Por jquery, eu posso ir clonando estes 3 elementos. Assim, no name deles tenho o [] para criar um array.

 

Ocorre que, no PHP, fazendo um foreach no array, mesmo que eu tenha marcado apenas o o (por exemplo) terceiro checkbox, em uma lista de 5 (lembra que eu posso clonar, neste exemplo eu fiz 4 clones, ficando com 5 conjuntos), o php entende que o checkbox que foi marcado foi o primeiro.

 

Usando o campo hidden com valor 0, deu certo.

 

salvou meu resto de feriado, obrigado :-)

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.