1

我有一个包含多个类别的表格。它们由复选框分隔,因此可以检查他们的帖子/故事所在的任意数量的类别。

这些值存储在一个 db 行中,在 INSERT 时用逗号分隔它们

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

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

2,3,6,12

这些是类别编号。

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

因此,如果您登录并转到您要编辑的条目,例如,我有分隔类别的复选框,因此很容易选中和取消选中添加和不添加......我已经尝试了我能得到的一切查看此编辑表单时要 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

在此先感谢忍者!!

4

3 回答 3

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
于 2011-08-17T21:21:12.267 回答
0

您可以如下所示使用它,它可能会有所帮助

if (in_array("2", $row_Recordset2['r_category'])) {echo "Checked";} 
于 2013-05-15T10:28:24.740 回答
0

那个 in_array 条件从来没有对我有用。我设计了一个完全前端的解决方案,而不是像魅力一样工作,并根据对数据库的更改自动更新自身。如果您有兴趣,请在此处查看。 https://stackoverflow.com/a/26433841/1896348

于 2014-10-17T21:53:27.267 回答