【发布时间】:2015-05-12 14:47:16
【问题描述】:
我有一个带有 2 个表的简单数据库:
1. active_services 2. devices
------------------ ------------------------------
id | service id | active_services_value
------------------ ------------------------------
1 | AD 1 | AD,DNS,DHCP
2 | FTP 2 | FTP,SMB
3 | DNS 3 | FTP
4 | DHCP 4 |
5 | SMB 5 | AD Backup
6 | AD Backup
我使用 active_services 中服务列的值作为表单的复选框,该表单将检查的值发布到表设备,列 active_service_values。我的代码如下:
<?php
if($active_services_value != ""){
// Need to generate a list of checkboxes from active_services but
// for each value in the active_services_field coresponding
// to the searched id (e.g for id 1, value1 = AD, value2 = DNS,
// value3 = DHCP ) set the checkboxes as checked
} else {
// display the service in active_services as checkboxes
$q = "SELECT * from active_services";
$r = mysqli_query($dbc, $q);
while($list = mysqli_fetch_assoc($r)){
?>
<div class="col-xs-4"><input type="checkbox" name="checkboxvar[]" value="<?php echo $list['service']; ?>"><?php echo $list['service'];?>
</div>
<?php } } ?>
</div>
?>
我的问题是:
如何显示“选中”复选框,让用户可以取消选中某些复选框,同时还显示未选中的剩余复选框,让用户可以检查新选项?
提前感谢大家的帮助。
【问题讨论】:
-
简单。请参阅规范化。
-
正如@Strawberry 提到的,您应该将表(尤其是设备)标准化为:1 - 简化数据操作和 2 - 提高性能。 en.wikipedia.org/wiki/Database_normalization
-
如果服务列表很小且固定(如示例中),那么您可以存储一个位值。
-
@Strawberry 谢谢,您对表格的规范化是正确的。这是我将来会为我所有的项目做的事情。但是,对于当前的,由于它已经是一个“生产环境”,我不能做太多。目前我只是在数据库和一些脚本中添加了一些新选项,但仅此而已......
标签: php mysql checkbox compare