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?

O W
fonte
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') ...
m_vitaly
fonte
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"> 
regilero
fonte
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(...
rybo111
fonte
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
} 
Gautam3164
fonte
15
$check_value = isset($_POST['my_checkbox_name']) ? 1 : 0;
Hammad Khan
fonte
muito rápido e muito inteligente
Tarek Kalaji 4/16
melhor solução que tenho visto
Debbie Kurth
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.

ZEESHAN ARSHAD
fonte
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
}
andy
fonte
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...

}
John Parker
fonte
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!";
     }
user2451511
fonte
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 :)

Hiram
fonte
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;
Mazz
fonte
1
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

A avaliação de curto-circuito tomará cuidado para que você não acesse your_checkbox_namequando não foi enviada.

Martin Thoma
fonte
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']?>>
Rembo
fonte
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>
antelove
fonte
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'])

Elvis Technologies
fonte
0

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

Thowfeek
fonte
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

Aliqua
fonte
-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']);
} 

?>
Grzegorz
fonte
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