php-将复选框值存储在db中并读取它们

php-将复选框值存储在db中并读取它们,php,mysql,arrays,checkbox,Php,Mysql,Arrays,Checkbox,我有一个存储在数据库中的服务列表,用户需要检查。名单会定期更新。 它们存储在“服务”表中,如下所示: 当用户选中复选框时,我将ID值存储在“人员”表中的“服务”单元格中 直到这里一切都很好 现在,我想列出表“services”中的所有服务,并与用户单元“services”中的服务以及用户单元中的服务进行交叉检查 最后的回声应该是这样的 <label>$service</label> <input name="services[]" type="checkbox" i

我有一个存储在数据库中的服务列表,用户需要检查。名单会定期更新。 它们存储在“服务”表中,如下所示:

当用户选中复选框时,我将ID值存储在“人员”表中的“服务”单元格中

直到这里一切都很好

现在,我想列出表“services”中的所有服务,并与用户单元“services”中的服务以及用户单元中的服务进行交叉检查

最后的回声应该是这样的

<label>$service</label>
<input name="services[]" type="checkbox" id="services[]" value="$id" $checked>
$service
有人能帮我做这个吗? 谢谢大家!


附言:我试着在这之后做到,但是我不能回应标签,然后我把它都搞砸了。我不确定我能不能理解你的意思。我希望我能。否则,评论这篇文章

您最好创建一个更好的数据库结构

tbl_users                  tbl_services                tbl_assign
+-------------+            +-------------+             +----------------+
| uid | name  |            | sid | title |             | id | uid | sid |
+-------------+            +-------------+             +----------------+
|     |       |            |     |       |             |    |     |     |
+-------------+            +-------------+             +----------------+
在此结构中,可以为每个用户指定一个或多个服务。 现在,您需要在tbl_assign中插入或删除记录,以便向每个用户授予或撤销服务

我希望你能做到。

我终于做到了。 也许这不是我问题的最佳答案,但总比什么都没有好

$servicii_user = mysql_query("SELECT servicii FROM people WHERE id='$id'")
or die(mysql_error());  
$ss = mysql_fetch_array($servicii_user);
$servicii_selectate = array();
$servicii_selectate= explode(',',$ss['servicii']);



$result = mysql_query("SELECT * FROM servicii")
or die(mysql_error());  

while ($row = mysql_fetch_array($result)) {
    if(in_array($row[0], $servicii_selectate)){
        echo '<input name="servicii[]" type="checkbox" value="'.$row[0].'" CHECKED>'.$row[1].' ';
    }else{
        echo '<input name="servicii[]" type="checkbox" value="'.$row[0].'">'.$row[1].' ';
    }
} 
$servicii\u user=mysql\u查询(“从id='$id'的人员中选择servicii”)
或者死(mysql_error());
$ss=mysql\u fetch\u数组($servici\u user);
$servicii_selectate=array();
$servicii_selectate=爆炸(',',$ss['servicii']);
$result=mysql\u查询(“从服务中选择*)
或者死(mysql_error());
while($row=mysql\u fetch\u数组($result)){
if(在数组中($row[0],$servici\u selectate)){
回显“.$row[1]”;
}否则{
回显“.$row[1]”;
}
} 

旁注:如果您清楚地存储元素,而不是将元素作为分隔列表存储在单个字段中,您可能会发现数据更易于操作和显示。对于这样的设置,您需要三张桌子。人员、服务和人员服务(这只是人员id和服务id的外键)。您的DB输入结构非常愚蠢。您应该使用真(1)或假(0)值为每个复选框的值创建不同的列。这会让你的生活更轻松。@Nav你能更具体一点吗?Nav-你能更具体一点吗?我有一张有服务的桌子,一张有人的桌子。每个人可以检查不同的服务(例如4/9)。我认为用服务id分隔的单元格就足够了。如果你有更好的答案,请给我…不要说我错了@大卫,你似乎是对的。我最初想用三张桌子,但后来我也选择了用。请告诉我如何以您的方式循环它们,如果用户有输入,请检查输入,我将按照您的方式进行操作:谢谢你。我的问题是交叉核对。当用户以后编辑此服务时,如何查看用户是否已检查此服务?我想返回所有的服务,但选择一个进行检查。谢谢!
tbl_users                  tbl_services                tbl_assign
+-------------+            +-------------+             +----------------+
| uid | name  |            | sid | title |             | id | uid | sid |
+-------------+            +-------------+             +----------------+
|     |       |            |     |       |             |    |     |     |
+-------------+            +-------------+             +----------------+
$servicii_user = mysql_query("SELECT servicii FROM people WHERE id='$id'")
or die(mysql_error());  
$ss = mysql_fetch_array($servicii_user);
$servicii_selectate = array();
$servicii_selectate= explode(',',$ss['servicii']);



$result = mysql_query("SELECT * FROM servicii")
or die(mysql_error());  

while ($row = mysql_fetch_array($result)) {
    if(in_array($row[0], $servicii_selectate)){
        echo '<input name="servicii[]" type="checkbox" value="'.$row[0].'" CHECKED>'.$row[1].' ';
    }else{
        echo '<input name="servicii[]" type="checkbox" value="'.$row[0].'">'.$row[1].' ';
    }
}