2011-08-17 129 views
1

我有一个有多个类别的表单。它们由复选框分开,这样一个可以检查任何数量的类别,他们的职位/故事会英寸PHP MYSQL编辑窗体,试图爆炸/爆炸行复选框?

的值存储在一个数据库行内把它们分开用逗号,而INSERT

GetSQLValueString(implode($_POST['r_category'],", "), "text"), 

所以在数据库我可能有一个看起来像这样的条目:

2,3,6,12 

这些是类别号码。

我现在正在构建一个编辑表单功能,用于编辑和更新这些记录。我找不到在编辑表单中将“分解”为值复选框的方法?

因此,如果您登录并转到您想要编辑的ENTRY,例如,我有复选框将类别分开,因此将很容易检查并取消选中添加并且不添加...我尝试了所有我可以将这些值设置为POST并在查看此编辑表单时进行检查。

下面是我的编辑表单页面上的一个类别复选框的示例,但它不起作用,当我有多个类别,如上面的示例2,3,6,12 ?? :

<input type="checkbox" name="r_category[]" 
<?php if (!(strcmp("2", $row_Recordset2['r_category']))) { 
       echo "checked=\"checked\"";} ?> value="2" />Cat 2 

在此先感谢NINJAS !!

+2

在单个字段中存储多个值总是一个坏主意和一个糟糕的设计。您应该规范化并将这些值存储在单独的表中。现在,如果您的字段出现“2”,ANYWHERE中的PHP中的“检查”代码将勾选复选框。因此,“12,22”的值也会检查'2'。 –

回答

5

我无法找到一个方法来“爆炸”的值到复选框编辑表单

此行是如此的接近,我认真想知道答案,如果这是一个笑话后。

根据您的数据库结构,您可以使用explode()函数根据分隔符将值分解为数组。例如:

$values = "1,2,3,4"; 
$array_of_values = explode(",", $values); 

在此之后,将$array_of_values含有与分别1234的值的四个元件的阵列。

在决定是否要显示复选框作为托运,您可以使用in_array()功能,使这一呼吁:

if (in_array("2", $array_of_values)) { 
    echo 'checked="checked"'; 
} 

除此之外,让我借此机会向第二个什么@MarkB在说对此问题的评论:这是一个不好的想法在一个数据库字段中保存多个值。它让搜索更难,它使得增加价值变得更困难......它使得一切都变得比需要的复杂。

处理此问题的最佳方法是使用多对多表来存储项目和类别的行,并为每个类别指定一个项目所属的行。

换句话说,你现在有这样的:

Item | Category 
--------------- 
123 | 1,2,3,4 

你会代替有一个表,看起来像这样:

Item | Category 
--------------- 
123 | 1 
123 | 2 
123 | 3 
123 | 4 
+0

优秀评论!!!好东西!!这真的有很大的帮助!我是这样一个视觉的人,这真的为我做了。谢谢! – eberswine

+0

@eberswine不客气。很高兴有帮助。 – AgentConundrum

+0

我认为这是我在这里得到的最佳答案之一! – eberswine

0

你可以用它如下图所示它可能是有帮助

if (in_array("2", $row_Recordset2['r_category'])) {echo "Checked";} 
0

in_array有条件的从来没有为我工作。我设计了一个完全的前端解决方案,它的作用就像魅力一样,并根据数据库的变化自动更新。如果你有兴趣,请在这里查看。 https://stackoverflow.com/a/26433841/1896348