¿Cómo leer si una casilla de verificación está marcada en PHP?


266

¿Cómo leer si una casilla de verificación está marcada en PHP?


8
Esta pregunta en realidad significa " fue verificado" (cuando se envió el formulario). PHP determinar si una casilla de verificación está marcada requeriría una llamada Ajax una vez que el elemento fue activado.
rybo111

Respuestas:


342

Si su página HTML se ve así:

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

Después de enviar el formulario, puede verificarlo con:

isset($_POST['test'])

o

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

57
Las casillas de verificación también pueden tener valor on, cuando están marcadas. Por lo tanto, por compatibilidad, es más fácil de usar isset($_POST['checkboxName']).
Damiqib

13
Algunos navegadores pueden admitir el valor "activado" cuando no se establece el atributo de valor, pero en general es mejor establecer el atributo de valor y verificarlo al enviarlo.
m_vitaly

3
¿Cambia el 'Valor1' si la casilla está marcada?
MoralCode

10
@Developer_ACE A menos que te malinterprete, el valor en este ejemplo sería value1si la casilla de verificación está marcada. Si no está marcado, $_POST['test']simplemente no existiría.
rybo111

104

Zend Framework utiliza un buen truco en las casillas de verificación, que también puede hacer usted mismo:

Cada casilla de verificación generada está asociada con un campo oculto del mismo nombre, colocado justo antes de la casilla de verificación, y con un valor de "0". Luego, si su casilla de verificación como el valor "1", siempre obtendrá el valor '0' o '1' en el OBTENER o POST resultante

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

También me di cuenta de eso, pero me siento seguro de usarlo: ¡Zend Framework también lo hace!
hpaknia

Esto es interesante. Pero, ¿existe una pequeña posibilidad de que el agente de usuario envíe el primer valor en lugar del último, suponiendo que la casilla esté marcada?
rybo111

@ rybo111, para el agente de usuario no lo creo, pero para un analizador de formularios JavaScript personalizado, debe tener cuidado.
regilero

Lo siento, ¿alguien podría explicarme cómo funciona? No entendi ¿Por qué ese campo oculto si solo se envía el último valor (el input[type="checkbox"]uno)?
tonix

66
cuando la casilla de verificación no está marcada, no se transmite en la publicación (por lo que solo se transmite lo oculto). Cuando se marca, se transmite y sobrescribirá el valor oculto.
regilero 01 de

53

Al usar casillas de verificación como una matriz:

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

Debes usar in_array():

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

Recuerde verificar que la matriz esté configurada primero, como:

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

casillas de verificación como una matriz y foreach ($_POST['food'] as $selected_food)trabajar en una marcada es agradable, gracias
bcag2

42

Deje que su html para su casilla de verificación sea como

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

Luego, después de enviar su formulario, debe marcar como

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

    // Checkbox is selected
} else {

   // Alternate code
}

Asumiendo que ese check1debería ser el nombre de su casilla de verificación. Y si su método de envío de formularios es GETentonces debe verificar con $_GETvariables como

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

   // Checkbox is selected
} 


6

He estado usando este truco durante varios años y funciona perfectamente sin ningún problema para el estado de la casilla de verificación marcada / sin marcar mientras se usa con PHP y la base de datos.

Código HTML: (para Agregar página)

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

Sugerencia: elimine la "casilla de verificación" si desea mostrarla como desmarcada de forma predeterminada

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: (uso para agregar / editar páginas)

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

Sugerencia: siempre habrá un valor vacío a menos que el usuario lo haya verificado. Entonces, ya tenemos código PHP para capturarlo, de lo contrario, mantenga el valor en 0. Luego, simplemente use la variable $ status para la base de datos.


1
Esta es la forma realmente buena de hacer esto en PHP simple y puro. pero tenga en cuenta que el valor de una casilla de verificación está activado cuando se activa y un valor inexistente si está marcado.
Elvis Technologies

4

Para verificar si una casilla está marcada, use empty ()

Cuando se envía el formulario, la casilla de verificación SIEMPRE se establecerá, ya que TODAS las variables POST se enviarán con el formulario.

Verifique si la casilla de verificación está marcada con vacío de la siguiente manera:

//Check if checkbox is checked    
if(!empty($_POST['checkbox'])){
 #Checkbox selected code
} else {
 #Checkbox not selected code
}

3
Si la casilla de verificación no está marcada, no se publicará, por lo que AHORA SIEMPRE se establecerá.
Wessam El Mahdy

^ NO * siempre se establecerá
El Codesee

3

Puede verificar que el valor correspondiente esté establecido y no vacío en la matriz $ _POST o $ _GET según la acción de su formulario.

es decir: con un formulario POST usando un name"test" (es decir <input type="checkbox" name="test">, usaría:

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

}

2

Aprenda sobre issetcuál es una "función" integrada que se puede usar en declaraciones if para saber si se ha usado o establecido una variable

Ejemplo:

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

2

Bueno, los ejemplos anteriores funcionan solo cuando desea INSERTAR un valor, no es útil para ACTUALIZAR diferentes valores en diferentes columnas, así que aquí está mi pequeño truco para actualizar:


//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[]" />

....

El secreto es simplemente actualizar todos los VALORES primero (en este caso a 0), y dado que solo enviará los valores marcados, eso significa que todo lo que obtenga debe establecerse en 1, por lo que todo lo que establece en 1.

El ejemplo es PHP pero se aplica a todo.

Que te diviertas :)


2

Puedes hacerlo con el corto si:

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

o con el nuevo PHP7 Null coalescing operator

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


1

Un cheque booleano minimalista con retención de posición del interruptor

<?php

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

?>

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

1
Al dar una respuesta, es preferible dar una explicación de POR QUÉ su respuesta es la correcta. Esto es especialmente cierto cuando respondes una publicación MUY antigua 11 otras respuestas.
Stephen Rauch

Es bueno que reconozca la necesidad de que la casilla de verificación retenga su estado. Sin embargo, su código para hacer esto no es correcto.
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>

¿Puedes explicar tu objetivo aquí?
Elvis Technologies

0

en BS3 puedes poner

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

Tenga en cuenta el uso deisset($datosOrdenCompra[0]['exenta'])


0

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


0

Wordpress tiene la checked()función. Referencia: https://developer.wordpress.org/reference/functions/checked/

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

Descripción Compara los dos primeros argumentos y si marcas idénticas como marcadas

Parámetros $ verificado (mixto) (obligatorio) Uno de los valores para comparar

$ actual (mixto) (Opcional) (verdadero) El otro valor para comparar, si no solo verdadero Valor predeterminado: verdadero

$ echo (bool) (Opcional) Si hacer eco o simplemente devolver la cadena Valor predeterminado: verdadero

Devuelve el atributo html #Return (string) o una cadena vacía


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

?>

¡Bienvenido a Stack Overflow! Si bien este fragmento de código puede resolver el problema, no explica por qué o cómo responde la pregunta. Por favor, incluya una explicación de su código , como que realmente ayuda a mejorar la calidad de su puesto. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no saber los motivos de su sugerencia de código. Señaladores / revisores: para respuestas de solo código como esta, ¡voto negativo, no elimine!
Scott Weldon el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.