首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新数据库中的标记值(它会被复制)

更新数据库中的标记值(它会被复制)
EN

Stack Overflow用户
提问于 2016-12-10 14:49:06
回答 2查看 110关注 0票数 1

我有一个表单,当我单击create POST $query = "INSERT INTO data(tags) VALUES ('$tags')";时,它会将标记发送到我的数据库中,然后用comas分隔。

并在单击编辑时接收它们。

代码语言:javascript
复制
GET
$query = "SELECT * FROM data WHERE id = $id";
$edit = mysqli_query($dbc, $query);
 while($row = mysqli_fetch_assoc($edit)){$tags = $row['tags'];}
POST
$tags = implode(",",$_POST['tags'];
$query = "UPDATE data SET tags= '$tags' WHERE id = $id";

这就是问题所在,当我单击update按钮时,我会发送带有新选定标记的前两个选定标记,并将它们添加到前面的标记上--一个示例,以了解我键入的内容:

  • 数据库标签: tag1,tag2
  • 表单编辑标签: tag1
  • 表单新标签: tag1tag3
  • 数据库更新标签: tag1、tag2、tag1、tag2、tag3、tag4 <form method="post" action=""> <select id="tags" name="tags[]" multiple="multiple"> <?php foreach ($tags as $tag) {echo "<option value'$tag' selected>$tag</option>";} ?> <option>tag1</option> <option>tag2</option> <option>tag3</option> <option>tag4</option> </select> <button type="submit" name="update">Submit</button> </form>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-10 15:01:03

修正你的数据结构!

不要将标记存储为单个列中的多个值的列表。您需要一个表,该表对每个项和每个标记都有一行:

代码语言:javascript
复制
create table ItemTags (
    ItemTagId int auto_increment primary key,
    ItemId int not null,
    Tag varchar(255) not null,
    constraint fk_ItemTags_ItemId foreign key (ItemId) references Items(Item)
);

然后,当您想插入一个标记时,只需将一个标记插入到这个表中即可。

为什么在一列中存储多个标记是个坏主意?

  • 您不能(很容易)验证标记对于给定项是否是唯一的。
  • 您不能(很容易)列出正在使用的所有标记。
  • MySQL具有糟糕的字符串操作功能。
  • MySQL不能(很容易)优化使用单个标记搜索项的查询。
票数 1
EN

Stack Overflow用户

发布于 2016-12-10 15:01:59

您需要构建一个函数来检查标记1是否等于表单标记1。重复这个für所有在DB中找到的标记(Foreach)。然后,如果需要的话,使用Update函数动态更新。

更好的方法是使用数组$tag,并删除其中的所有重复项。

示例:

$tagArrayUni = array_unique($tag);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41076802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档