PHP MYSQL编辑表单,试图内爆/爆炸行复选框


PHP MYSQL edit form, trying to implode/explode row to checkboxes?

我有一个有多个类别的表单。它们由复选框分隔,因此人们可以选择他们的文章/故事将在任何数量的类别中。

值存储在一个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

提前感谢NINJAS!!

我找不到一种方法来"爆炸"的值到复选框上的编辑表单

这句话太接近答案了,我真的怀疑这是不是一个笑话。

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

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

在此之后,$array_of_values将包含一个包含四个元素的数组,分别为1, 2, 34

当决定是否显示复选框为选中时,您可以使用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

你可以像下面这样使用它,它可能会有帮助

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

in_array条件从来没有为我工作。相反,我设计了一个完全前端的解决方案,它工作起来很神奇,可以根据数据库的变化自动更新自己。如果你感兴趣,可以在这里查看。https://stackoverflow.com/a/26433841/1896348