如何读取PHP中是否选中了复选框?


266

如何读取PHP中是否选中了复选框?


8
这个问题实际上表示“ 检查”(提交表单时)。PHP确定是否一个复选框选中需要Ajax调用一旦元件切换。
rybo111

Answers:


342

如果您的HTML页面如下所示:

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

提交表格后,您可以使用以下方法进行检查:

isset($_POST['test'])

要么

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

57
on选中复选框时,复选框也可以具有value 。因此,出于兼容性考虑,使用起来更加容易isset($_POST['checkboxName'])
Damiqib 2010年

13
当未设置value属性时,某些浏览器可能会支持“ on”值,但通常最好设置value属性并在提交时进行检查。
m_vitaly 2010年

3
如果选中此框,“ Value1”会更改吗?
MoralCode 2014年

10
@Developer_ACE除非我对您有误解,否则本示例中的值将为value1选中该复选框的情况。如果不检查,$_POST['test']将根本不存在。
rybo111 2015年

104

Zend Framework在复选框上使用了不错的技巧,您也可以自己做:

生成的每个复选框都与一个同名的隐藏字段相关联,该字段位于该复选框的正前方,并且值为“ 0”。然后,如果您的复选框的值为“ 1”,则始终在结果GET或POST中获得“ 0”或“ 1”值

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

我也注意到了这一点,但我觉得使用起来很安全:Zend Framework也可以使用它!
hpaknia 2014年

这是有趣的。但是,假设复选框已选中,用户代理是否有可能提交第一个值而不是最后一个值?
rybo111

@ rybo111,对于用户代理,我不这么认为,但是对于自定义javascript表单解析器,您应该注意。
regilero 2015年

抱歉,有人可以向我解释一下它是如何工作的吗?我不明白 如果始终只提交最后一个值(即那个值),为什么要选择该隐藏字段input[type="checkbox"]
tonix '16

6
如果未选中此复选框,则不会在帖子中传输(因此仅传输隐藏的内容)。选中后将被传输,并将覆盖隐藏值。
regilero'2

53

当使用复选框作为数组时:

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

您应该使用in_array()

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

切记先检查数组设置是否正确,例如:

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

复选框作为数组并foreach ($_POST['food'] as $selected_food)在选中的复选框上工作是不错的,谢谢
bcag2

42

让您的html复选框像

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

然后,提交表格后,您需要像

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

    // Checkbox is selected
} else {

   // Alternate code
}

假设这check1应该是您的复选框名称,并且如果您的表单提交方法是,GET则需要使用$_GET诸如

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

   // Checkbox is selected
} 


6

我使用这个技巧已经有好几年了,并且在与PHP和数据库一起使用时,它可以完美地工作,而对选中/未选中复选框状态没有任何问题。

HTML代码:(用于添加页面)

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

提示:如果要默认显示为未选中,请删除“复选框”

HTML代码:(用于编辑页面)

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

PHP代码:(用于添加/编辑页面)

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

提示:除非用户检查,否则总会有空值。因此,我们已经有PHP代码可以捕获它,否则将其值保持为0。然后,只需对数据库使用$ status变量即可。


1
这是用纯简单的php做到这一点的真正好形式。但必须注意,复选框的值在被激活时为string on,如果选中则为不存在的值。
Elvis Technologies

4

要检查是否已选中复选框,请使用empty()

提交表单后,将始终设置此复选框,因为所有POST变量将与表单一起发送。

检查复选框是否被选中为空,如下所示:

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

3
如果未选中此复选框,则不会过帐,因此现在将始终设置。
Wessam El Mahdy

始终不设置^ NOT *
The Codesee,

3

您可以根据表单的操作,在$ _POST或$ _GET数组中检查对应的值是否已设置且为非空。

ie:使用带有name“ test”(即)的POST表单<input type="checkbox" name="test">,您可以使用:

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

}

2

了解isset哪个是内置的“函数”,该函数可以在if语句中使用,以告知是否已使用或设置了变量

例:

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

2

好,上面的示例仅在您想插入一个值时才起作用,对于将不同的值更新到不同的列没有用,所以这是我进行更新的小技巧:


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

....

秘诀就是先更新所有VALUES(在本例中为0),由于只会发送检查的值,这意味着应该将获得的所有内容都设置为1,因此将获得的所有内容都设置为1。

示例是PHP,但适用于所有内容。

玩得开心 :)


2

如果满足以下条件,则可以使用short方法:

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

或使用新的PHP7 Null coalescing operator

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

1
$is_checked = isset($_POST['your_checkbox_name']) &&
              $_POST['your_checkbox_name'] == 'on';

短路评估会很小心,这样您就可以your_checkbox_name在未提交时不进行访问。


1

保留开关位置的布尔布尔检查

<?php

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

?>

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

1
给出答案时,最好对原因做出一些解释。回答非常老的帖子的其他11个答案时尤其如此。
斯蒂芬·劳奇

知道您需要复选框保留其状态是件好事。但是,您执行此操作的代码不正确。
维尔恩·詹森

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>

你能在这里解释你的目标吗?
Elvis Technologies

0

在BS3中,您可以放

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

请注意的用法isset($datosOrdenCompra[0]['exenta'])


0

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


0

WordPress具有此checked()功能。参考:https : //developer.wordpress.org/reference/functions/checked/

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

说明比较前两个参数以及是否选中相同的标记

参数$ checked(混合)(必需)要比较的值之一

$ current(混合)(可选)(真)不只是真,要比较的其他值缺省值:真

$ echo(bool)(可选)是回显还是仅返回字符串默认值:true

返回#返回(字符串)html属性或空字符串


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

?>

欢迎使用Stack Overflow!尽管此代码段可以解决问题,但并未说明原因或答案。请提供您的代码说明,因为这确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。举报人/审阅者: 对于仅限代码的答案,例如这一答案,请表决,不要删除!
Scott Weldon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.