como obtenho todas as variáveis da caixa de seleção, mesmo que não sejam marcadas de HTML para PHP?
Pergunta
Percebi que o PHP parece retornar apenas valores de caixas de seleção marcadas.Gostaria de ver uma lista de caixas de seleção, não apenas valores de caixas de seleção marcadas.Existe uma maneira de detectar variáveis de caixas desmarcadas?
Perguntei porque quero poder atualizar as configurações.Por exemplo, tenho algumas opções que já estão marcadas, mas se um usuário decidir desmarcar uma opção, preciso saber o valor desmarcado para poder atualizar a opção para ser desabilitada.
Solução
Acabei de me deparar com esse problema.Eu resolvi isso adicionando uma duplicata hidden
campo com o mesmo nome.Quando o navegador envia essas informações, o segundo campo substitui o primeiro (portanto, certifique-se de que o hidden
campo vem primeiro).
<input type="hidden" name="foo" value="">
<input type="checkbox" name="foo" value="bar">
Se o checkbox
não está marcado, você obtém:
$_REQUEST[ 'foo' ] == ""
Se o checkbox
é verificado, você obtém:
$_REQUEST[ 'foo' ] == "bar"
Outras dicas
Isso não é algo que pode ser feito puramente em PHP.
Os navegadores só enviam informações sobre checkboxes se eles estiverem marcados, se você quiser enviar também informações sobre checkboxes desmarcados, você terá que adicionar campos ocultos no formulário e usar javascript para gerenciá-los.
Eu mesmo me deparei com esse problema e resolvi-o atualizando todos os valores no banco de dados para desmarcados e verificando novamente apenas aqueles que estão nos dados POST. Isso funciona bem para mim, mas pode não agradar a todos.
Uma implementação pura de PHP não parece possível, mas você pode tentar usar jQuery/AJAX.
Suponha que você tenha 3 caixas de seleção que deseja verificar e update_settings é o nome de suas funções que usam o nome da caixa de seleção como primeiro argumento e um valor bool como segundo (ativar ou não).
Pegue o seguinte trecho:
$checkboxes = array("checkbox1", "checkbox2", "checkbox3");
foreach($checkboxes as $checkbox){
$checked = isset($_POST[$checkbox]);
update_settings($checkbox, $checked);
}
Embora Peter Kovacs solução vai funcionar, não acho prático pois você já pode verificar suas variáveis usando isset.