我有这个复选框:
<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_name
和setting_value
。在这种情况下,它将是:
maintenance
和1
我这样更新:
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.
任何人都知道造成这种情况的原因是什么?
答案 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' : '')?> >