php动态复选框

时间:2009-10-13 13:15:23

标签: php sql

目前我有一个表单提交带有文本字段的图像,例如 标题,描述和另一个自动增加imageID的字段,另一个 实际文件的区域,称为vfile,***是另一个具有的区域 3个复选框和一个文本字段。 一切正常,这就是它的作用。将数据提交到数据库,以便它可以将信息提取到网站上的页面。 我想要更新的唯一部分是: 3个复选框和文本字段。 让我们说第一个复选框是:苹果 第二个:橘子 第三种:葡萄 在另一个类别中是一个空白文本字段,如果您添加某些内容,它会将其添加到名为“其他”的类别中。

所以数据库设计有4个字段:1个 - 苹果,2个 - 橙子,3个 - 葡萄,4个 - 其他。

当我点击一个复选框时,它会在正确的苹果,橘子或葡萄下将检查添加到数据库中。 如果我在文本框中添加一个字段,例如:Bannanas,那么它会将“Bannanas”添加到数据库字段中并在数据库中显示。

这一切都很好,但如果下一张图片包含所有4个项目加上另一个项目怎么办?如果下一张照片有苹果,橘子,葡萄,Bannanas和李子?

我怎么能拥有“Bannanas”其他类别,当我下次进入添加图像页面时,可以更改为可以为下一个图片选择的复选框类别。 因此,当我去第二张图片提交时,它会给我选择不仅仅有3个复选框,而是现在有4个复选框,我可以检查前4个,“苹果,橘子,葡萄,Bannanas”然后放入李子在另一类。

基本上在提交时,它会获取其他feild中的内容并将新类别添加到数据库中,然后将其显示在复选框选项数组中,现在将其从其他类别中删除,因为它是一个复选框。 (因此它不希望旧字段中剩下的值,因为它会继续创建相同的类别并可能重写旧数据。

无论如何,有什么建议吗? 提前致谢。

3 个答案:

答案 0 :(得分:1)

(听起来这更像是一个数据库设计问题,而不是一个php问题,但我可能会误解你正在寻找什么建议)

听起来你说这些属性(苹果,橘子等)存储在主表中的列中;但你描述的情况听起来更像是标记。通常,您将维护一个标记的内容列表(您的图像),以及所有可能标记的单独列表(其中包含行的表格:Apple,Orange,Grape)。您的UI可以选择从预先存在的标记(标记表中的行)或使用“其他”框添加新标记。新标记将作为新行添加到标记表中。由于标签和标签项具有多对多关系,因此您将创建第三个表(称为连接表),用于存储标记项和标记键的键;这样你就可以轻松地选择关系的任何一方:获取给定项目的所有标签;获取具有给定标记的所有项目。

这有帮助吗?

(编辑:征求意见)

所以,活动听起来像是标签列表。如果我想显示一个包含所有活动复选框的表单,我可以查询活动表。这些复选框中的每一个都可以具有名称属性或捕获其绑定的行的ID的内容。

此外,我还会从联接表中选择我当前查看过的图片所选标签的ID。当我填充复选框列表时,我可以检查此结果集,以查看我在页面上放置的复选框的ID是否在图像的标签列表中。

要在提交时将其存储回数据库,最简单的事情可能是(在事务中)从连接表中删除图像的所有条目,并根据复选框的状态将其替换为新条目。表格。

答案 1 :(得分:0)

放下苹果,橘子和葡萄柱。

创建第二个包含两个字段的表:imageID和itemtype。 不要把这两个中的任何一个变成钥匙。现在,您可以根据需要为每个图像列出多种不同类型的项目。从数据库中获取正在使用的项目类型列表将相对昂贵,但除非您有数百万项,否则这应该不是问题。 (Mikeb建议在单独的表中保留项目类型列表以加快速度。)

另一种方法是为您遇到的每种项目类型动态地向第一个表添加列。这将创建一个非常稀疏的表。我不会这样做。

答案 2 :(得分:0)

您需要更改数据库架构以支持无限数量的属性。

您应该将您的属性列表从记录中的一组字段移动到新表中的相关记录列表中。这个新表需要2列。第一个是现有表的主键,因此您可以建立表之间的关系。第二个是属性字段('Bananas'或'Apples'或'Plums'等)。您可以在主表中为每个记录创建任意数量的记录。如果没有选中,您也可以没有属性记录。

两个表之间的这种关系称为一对多关系。