Como ler se uma caixa de seleção está marcada no PHP?


266

Como ler se uma caixa de seleção está marcada no PHP?


8
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:

<input type="checkbox" name="test" value="value1">

Depois de enviar o formulário, você pode verificá-lo com:

isset($_POST['test'])

ou

if ($_POST['test'] == 'value1') ...

57
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

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" value="1"> 

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.
— regilero

53

Ao usar caixas de seleção como uma matriz:

<input type="checkbox" name="food[]" value="Orange">
<input type="checkbox" name="food[]" value="Apple">

Você deve usar in_array():

if(in_array('Orange', $_POST['food'])){
  echo 'Orange was checked!';
}

Lembre-se de verificar se a matriz está definida primeiro, como:

if(isset($_POST['food']) && in_array(...

caixas de seleção como uma matriz e foreach ($_POST['food'] as $selected_food)para trabalhar em um verificado é bom, obrigado
— bcag2

42

Deixe seu html para sua caixa de seleção ser como

<input type="checkbox" name="check1">

Depois de enviar seu formulário, verifique como

if (isset($_POST['check1'])) {

    // Checkbox is selected
} else {

   // Alternate code
}

Supondo que esse check1seja o nome da caixa de seleção. E se o método de envio do formulário for GET, você precisará verificar com $_GETvariáveis

if (isset($_GET['check1'])) {

   // Checkbox is selected
} 


6

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)

<input name="status" type="checkbox" value="1" checked>

Dica: remova a "caixa de seleção" se desejar mostrá-la como desmarcada por padrão

Código HTML: (para Editar Página)

<input name="status" type="checkbox" value="1" 
<?php if ($row['status'] == 1) { echo "checked='checked'"; } ?>>

Código PHP: (use para adicionar / editar páginas)

$status = $_POST['status'];
if ($status == 1) {
$status = 1;
} else {
$status = 0;
}

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.


1
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
}

3
Se a caixa de seleção estiver desmarcada, ela não será publicada e, agora, SEMPRE será definida.
— Wessam El Mahdy

^ NÃO * sempre esteja definido
— O Codesee 14/06

3

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 namede "teste" (ou seja <input type="checkbox" name="test">, você usaria:

if(isset($_POST['test']) {
   // The checkbox was enabled...

}

2

Aprenda sobre issetqual é uma "função" integrada que pode ser usada nas instruções if para dizer se uma variável foi usada ou definida

Exemplo:

    if(isset($_POST["testvariabel"]))
     {
       echo "testvariabel has been set!";
     }

2

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();}

        }
}
<input type="checkbox" value="menu_news" name="check_menus[]" />
<input type="checkbox" value="menu_gallery" name="check_menus[]" />

....

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 :)


2

Você pode fazer isso com o curto se:

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

ou com o novo PHP7 Null coalescing operator

$check_value = $_POST['my_checkbox_name'] ?? 0;


1

Uma verificação booleana minimalista com retenção da posição do interruptor

<?php

$checked = ($_POST['foo'] == ' checked');

?>

<input type="checkbox" name="foo" value=" checked"<?=$_POST['foo']?>>

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.
— Vern Jensen

1
<?php

  if (isset($_POST['add'])) {

    $nama      = $_POST['name'];
    $subscribe = isset($_POST['subscribe']) ? $_POST['subscribe'] : "Not Checked";

    echo "Name: {$nama} <br />";
    echo "Subscribe: {$subscribe}";

    echo "<hr />";   

  }

?>

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="POST" >

  <input type="text" name="name" /> <br />
  <input type="checkbox" name="subscribe" value="news" /> News <br />

  <input type="submit" name="add" value="Save" />

</form>

você pode explicar seu objetivo aqui?
— Elvis Technologies

0

no BS3 você pode colocar

  <?php
                  $checked="hola";
                  $exenta = $datosOrdenCompra[0]['exenta'];
                  var_dump($datosOrdenCompra[0]['exenta']);
                  if(isset($datosOrdenCompra[0]['exenta']) and $datosOrdenCompra[0]['exenta'] == 1){

                      $checked="on";

                  }else{
                    $checked="off";
                  }

              ?>
              <input type="checkbox" id="exenta" name="exenta" <?php echo $checked;?> > <span class="label-text"> Exenta</span>

Observe o uso deisset($datosOrdenCompra[0]['exenta'])


0

filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)


0

Wordpress tem a checked()função. Referência: https://developer.wordpress.org/reference/functions/checked/

checked( mixed $checked, mixed $current = true, bool $echo = true )

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


-3
<?php

if(isset($_POST['nameCheckbox'])){
    $_SESSION['fr_nameCheckbox'] = true;
}

?>

<input type="checkbox" name="nameCheckbox" 

<?php 

if(isset($_SESSION['fr_nameCheckbox'])){
    echo 'checked'; 
    unset($_SESSION['fr_nameCheckbox']);
} 

?>

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!
— 21816 Scott Weldon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.