php - 复选框的值无法正常工作

时间:2014-01-03 11:49:08

标签: php mysql checkbox

我有这个复选框:

<label>Maintenance Mode: <small>Tick to enable/disable.</small></label>
<input type="checkbox" name="maintenance" value="1" <?php echo $maintenance; ?> >

我从我的数据库中获取数据。因此,如果在我的数据库中启用了维护,则将选中该复选框。这是这样的:

if($sdata['maintenance']==1):
    $maintenance="checked='checked'";
else: 
    $maintenance="";
endif;

问题是,每当我想禁用维护时,它都不会更新数据库。它仍将设置为“1”。

这是我发布的方式:

$maintenance = inputFilter($_POST['maintenance']);

我的数据库表有两列:

setting_namesetting_value。在这种情况下,它将是:

maintenance1

我这样更新:

foreach($_POST as $key => $value)
{
  $value = inputFilter($value);
  mysql_query("UPDATE settings SET setting_value='$value' where setting_name='$key' limit 1")
  or die(mysql_error());
}

每当我取消选中该复选框并保存设置时,都不会发生任何事情。我甚至试图从帖子中删除$maintenance,当它未经检查时,值为0.

任何人都知道造成这种情况的原因是什么?

4 个答案:

答案 0 :(得分:5)

未检查复选框不会在POST请求中发送,因此其密钥不在$ _POST

您应该检查复选框名称是否存在。

if(!isset($_POST['maintenance'])) {
     // Checkbox is unchecked
}

答案 1 :(得分:0)

如果未选中复选框,则不会在$ _POST中设置。你必须检查这样的事情:

if(isset($_POST['maintenance']) && $_POST['maintanance'] != 0) {
    //is checked
} else {
    //is unchecked
} 

答案 2 :(得分:0)

你可以试试这个:

<?php

if($_SERVER['REQUEST_METHOD'] == 'GET') {
    if($sdata['maintenance']==1):
        $maintenance="checked='checked'";
    else:
        $maintenance="";
    endif;
}
elseif($_SERVER['REQUEST_METHOD'] == 'POST') {
    if(array_key_exists('maintenance',$_POST)) {
        $maintenance="checked='checked'";
    }
    else{
        $maintenance="";
    }
}

答案 3 :(得分:0)

在复选框之前将默认(关闭)值放在隐藏输入中:

<input type="hidden" name="maintenance" value="0"/>
<input type="checkbox" name="maintenance" value="1" <?=($sdata['maintenance']==1 ? 'checked' : '')?> >