Esta pergunta realmente significa " foi marcada" (quando o formulário foi enviado). O PHP determinando se uma caixa de seleção está marcada exigiria uma chamada do Ajax assim que o elemento fosse alternado.
rybo111
Respostas:
342
Se sua página HTML estiver assim:
<inputtype="checkbox"name="test"value="value1">
Depois de enviar o formulário, você pode verificá-lo com:
As caixas de seleção também podem ter valor onquando estão marcadas. Portanto, para compatibilidade, é mais fácil apenas usar isset($_POST['checkboxName']).
Damiqib
13
O valor "on" pode ser suportado por alguns navegadores quando o atributo value não está definido, mas em geral é melhor definir o atributo value e verificá-lo no envio.
m_vitaly
3
O 'Valor1' muda se a caixa estiver marcada?
MoralCode
10
@ Developer_ACE A menos que eu esteja entendendo mal você, o valor neste exemplo seria value1se a caixa de seleção estiver marcada. Se não estiver marcado, $_POST['test']simplesmente não existiria.
Rybo111 23/05
104
O Zend Framework usa um bom hack nas caixas de seleção, que você também pode fazer:
Cada caixa de seleção gerada é associada a um campo oculto com o mesmo nome, colocado logo antes da caixa de seleção e com o valor "0". Então, se sua caixa de seleção for o valor "1", você sempre obterá o valor '0' ou '1' no GET ou POST resultante
Também notei isso, mas me sinto seguro em usá-lo: o Zend Framework também!
Hpaknia #
Isto é interessante. Mas existe uma pequena possibilidade de que o agente do usuário envie o primeiro valor em vez do último, supondo que a caixa de seleção esteja marcada?
precisa saber é o seguinte
@ rybo111, para o agente do usuário, acho que não, mas para um analisador de formulário javascript personalizado, você deve tomar cuidado.
regilero
Desculpe, alguém poderia me explicar como isso funciona? Eu não entendi Por que esse campo oculto se apenas o último valor é sempre enviado (o input[type="checkbox"]único)?
tonix 31/01/19
6
quando a caixa de seleção está desmarcada, ela não é transmitida na postagem (portanto, apenas o oculto é transmitido). Quando marcado, é transmitido e substitui o valor oculto.
Uso esse truque há vários anos e funciona perfeitamente sem problemas para o status de caixa de seleção marcada / desmarcada ao usar com PHP e banco de dados.
Dica: sempre haverá um valor vazio, a menos que o usuário o tenha verificado. Portanto, já temos código PHP para capturá-lo, mas mantenha o valor igual a 0. Em seguida, basta usar a variável $ status para o banco de dados.
esta é realmente a melhor forma de fazer isso em php simples e simples. mas tenha em atenção que o valor de uma caixa de verificação está ligado quando é activado um valor inexistente se estiver marcado.
Elvis Technologies
4
Para verificar se uma caixa de seleção está marcada, use empty ()
Quando o formulário é enviado, a caixa de seleção SEMPRE será definida, porque TODAS as variáveis POST serão enviadas com o formulário.
Marque se a caixa de seleção estiver marcada com vazio, conforme a seguir:
//Check if checkbox is checked if(!empty($_POST['checkbox'])){#Checkbox selected code}else{#Checkbox not selected code}
Bem, os exemplos acima funcionam apenas quando você deseja inserir um valor, não útil para atualizar valores diferentes em colunas diferentes, então aqui está meu pequeno truque para atualizar:
//EMPTY ALL VALUES TO 0
$queryMU ='UPDATE '.$db->dbprefix().'settings SET menu_news = 0, menu_gallery = 0, menu_events = 0, menu_contact = 0';
$stmtMU = $db->prepare($queryMU);
$stmtMU->execute();if(!empty($_POST['check_menus'])){foreach($_POST['check_menus']as $checkU){try{//UPDATE only the values checked
$queryMU ='UPDATE '.$db->dbprefix().'settings SET '.$checkU.'= 1';
$stmtMU = $db->prepare($queryMU);
$stmtMU->execute();}catch(PDOException $e){
$msg ='Error: '. $e->getMessage();}}}
O segredo é apenas atualizar todos os VALUES primeiro (neste caso, para 0) e, como o envio somente dos valores verificados, isso significa que tudo o que você obtém deve ser definido como 1, e tudo o que é definido como 1.
Ao dar uma resposta, é preferível dar uma explicação sobre POR QUE sua resposta é essa. Isto é especialmente verdade quando se responde a um post MUITO antigo 11 outras respostas.
Stephen Rauch
É bom que você reconheça a necessidade da caixa de seleção manter seu estado. No entanto, seu código para fazer isso não está correto.
Bem-vindo ao Stack Overflow! Embora esse trecho de código possa resolver o problema, ele não explica por que ou como responde à pergunta. Por favor incluir uma explicação para o seu código , como o que realmente ajuda a melhorar a qualidade do seu post. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código. Sinalizadores / revisores: para respostas somente de código como esta, com voto negativo, não exclua!
Respostas:
Se sua página HTML estiver assim:
Depois de enviar o formulário, você pode verificá-lo com:
ou
fonte
on
quando estão marcadas. Portanto, para compatibilidade, é mais fácil apenas usarisset($_POST['checkboxName'])
.value1
se a caixa de seleção estiver marcada. Se não estiver marcado,$_POST['test']
simplesmente não existiria.O Zend Framework usa um bom hack nas caixas de seleção, que você também pode fazer:
Cada caixa de seleção gerada é associada a um campo oculto com o mesmo nome, colocado logo antes da caixa de seleção e com o valor "0". Então, se sua caixa de seleção for o valor "1", você sempre obterá o valor '0' ou '1' no GET ou POST resultante
fonte
input[type="checkbox"]
único)?Ao usar caixas de seleção como uma matriz:
Você deve usar
in_array()
:Lembre-se de verificar se a matriz está definida primeiro, como:
fonte
foreach ($_POST['food'] as $selected_food)
para trabalhar em um verificado é bom, obrigadoDeixe seu html para sua caixa de seleção ser como
Depois de enviar seu formulário, verifique como
Supondo que esse
check1
seja o nome da caixa de seleção. E se o método de envio do formulário forGET
, você precisará verificar com$_GET
variáveisfonte
fonte
Uso esse truque há vários anos e funciona perfeitamente sem problemas para o status de caixa de seleção marcada / desmarcada ao usar com PHP e banco de dados.
Código HTML: (para Adicionar Página)
Dica: remova a "caixa de seleção" se desejar mostrá-la como desmarcada por padrão
Código HTML: (para Editar Página)
Código PHP: (use para adicionar / editar páginas)
Dica: sempre haverá um valor vazio, a menos que o usuário o tenha verificado. Portanto, já temos código PHP para capturá-lo, mas mantenha o valor igual a 0. Em seguida, basta usar a variável $ status para o banco de dados.
fonte
Para verificar se uma caixa de seleção está marcada, use empty ()
Quando o formulário é enviado, a caixa de seleção SEMPRE será definida, porque TODAS as variáveis POST serão enviadas com o formulário.
Marque se a caixa de seleção estiver marcada com vazio, conforme a seguir:
fonte
Você pode verificar o valor correspondente como sendo definido e não vazio na matriz $ _POST ou $ _GET, dependendo da ação do seu formulário.
ou seja: com um formulário POST usando um
name
de "teste" (ou seja<input type="checkbox" name="test">
, você usaria:fonte
Aprenda sobre
isset
qual é uma "função" integrada que pode ser usada nas instruções if para dizer se uma variável foi usada ou definidaExemplo:
fonte
Bem, os exemplos acima funcionam apenas quando você deseja inserir um valor, não útil para atualizar valores diferentes em colunas diferentes, então aqui está meu pequeno truque para atualizar:
....
O segredo é apenas atualizar todos os VALUES primeiro (neste caso, para 0) e, como o envio somente dos valores verificados, isso significa que tudo o que você obtém deve ser definido como 1, e tudo o que é definido como 1.
Exemplo é PHP, mas se aplica a tudo.
Diverta-se :)
fonte
Você pode fazer isso com o curto se:
ou com o novo PHP7
Null coalescing operator
fonte
A avaliação de curto-circuito tomará cuidado para que você não acesse
your_checkbox_name
quando não foi enviada.fonte
Uma verificação booleana minimalista com retenção da posição do interruptor
fonte
fonte
no BS3 você pode colocar
Observe o uso de
isset($datosOrdenCompra[0]['exenta'])
fonte
filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)
fonte
Wordpress tem a
checked()
função. Referência: https://developer.wordpress.org/reference/functions/checked/Descrição Compara os dois primeiros argumentos e, se marcas idênticas, como marcadas
Parâmetros $ selected (mixed) (Obrigatório) Um dos valores para comparar
$ current (misto) (Opcional) (true) O outro valor para comparar se não for apenas true Valor padrão: true
$ echo (bool) (Opcional) Se deseja ecoar ou simplesmente retornar a string Valor padrão: true
Retorno #Return (string) atributo html ou string vazia
fonte
fonte