【问题标题】:PHP MYSQL edit form, trying to implode/explode row to checkboxes?PHP MYSQL 编辑表单,试图将行内爆/爆炸到复选框?
【发布时间】:2011-10-29 07:06:30
【问题描述】:

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

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

提前感谢忍者!!

【问题讨论】:

  • 在一个字段中存储多个值总是一个坏主意,也是一个糟糕的设计。您应该规范化事物并将这些值存储在单独的表中。照原样,如果“2”出现在您的任何地方,您在 PHP 中的“检查”代码将勾选一个复选框。所以“12,22”的值也会检查“2”。

标签: php mysql checkbox explode implode


【解决方案1】:

我找不到将值“分解”到编辑表单上的复选框中的方法

这条线与答案非常接近,我非常怀疑这是否是一个笑话帖子。

鉴于您的数据库结构,您可以使用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 在 cmets 中就这个问题所说的话:在单个数据库字段中保存多个值是一个糟糕的想法。它使搜索变得更加困难,使添加值变得更加困难......它只是让一切变得比它需要的更复杂。

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

换句话说,你目前有这个:

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

您将拥有一个如下所示的表格:

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

【讨论】:

  • 优秀的评论!!!好东西!!这真的很有帮助!我是一个视觉上的人,这真的为我做了。谢谢!
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多