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í:
<inputtype="checkbox"name="test"value="value1">
Después de enviar el formulario, puede verificarlo con:
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
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.
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
<inputtype="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}
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.
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.
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}
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();}}}
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.
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.
¡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!
Respuestas:
Si su página HTML se ve así:
Después de enviar el formulario, puede verificarlo con:
o
fuente
on
, cuando están marcadas. Por lo tanto, por compatibilidad, es más fácil de usarisset($_POST['checkboxName'])
.value1
si la casilla de verificación está marcada. Si no está marcado,$_POST['test']
simplemente no existiría.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
fuente
input[type="checkbox"]
uno)?Al usar casillas de verificación como una matriz:
Debes usar
in_array()
:Recuerde verificar que la matriz esté configurada primero, como:
fuente
foreach ($_POST['food'] as $selected_food)
trabajar en una marcada es agradable, graciasDeje que su html para su casilla de verificación sea como
Luego, después de enviar su formulario, debe marcar como
Asumiendo que ese
check1
debería ser el nombre de su casilla de verificación. Y si su método de envío de formularios esGET
entonces debe verificar con$_GET
variables comofuente
fuente
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)
Sugerencia: elimine la "casilla de verificación" si desea mostrarla como desmarcada de forma predeterminada
Código HTML: (para Editar página)
Código PHP: (uso para agregar / editar páginas)
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.
fuente
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:
fuente
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:fuente
Aprenda sobre
isset
cuál es una "función" integrada que se puede usar en declaraciones if para saber si se ha usado o establecido una variableEjemplo:
fuente
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:
....
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 :)
fuente
Puedes hacerlo con el corto si:
o con el nuevo PHP7
Null coalescing operator
fuente
La evaluación de cortocircuito se encargará de que no acceda
your_checkbox_name
cuando no se haya enviado.fuente
Un cheque booleano minimalista con retención de posición del interruptor
fuente
fuente
en BS3 puedes poner
Tenga en cuenta el uso de
isset($datosOrdenCompra[0]['exenta'])
fuente
filter_input (INPUT_POST, 'checkbox_name', FILTER_DEFAULT, FILTER_FORCE_ARRAY)
fuente
Wordpress tiene la
checked()
función. Referencia: https://developer.wordpress.org/reference/functions/checked/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
fuente
fuente