como obtenho todas as variáveis ​​​​da caixa de seleção, mesmo que não sejam marcadas de HTML para PHP?

StackOverflow https://stackoverflow.com/questions/1944019

  •  20-09-2019
  •  | 
  •  

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top