我有一个表单,当我单击create POST $query = "INSERT INTO data(tags) VALUES ('$tags')";时,它会将标记发送到我的数据库中,然后用comas分隔。
并在单击编辑时接收它们。
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按钮时,我会发送带有新选定标记的前两个选定标记,并将它们添加到前面的标记上--一个示例,以了解我键入的内容:
<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>发布于 2016-12-10 15:01:03
修正你的数据结构!
不要将标记存储为单个列中的多个值的列表。您需要一个表,该表对每个项和每个标记都有一行:
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)
);然后,当您想插入一个标记时,只需将一个标记插入到这个表中即可。
为什么在一列中存储多个标记是个坏主意?
发布于 2016-12-10 15:01:59
您需要构建一个函数来检查标记1是否等于表单标记1。重复这个für所有在DB中找到的标记(Foreach)。然后,如果需要的话,使用Update函数动态更新。
更好的方法是使用数组$tag,并删除其中的所有重复项。
示例:
$tagArrayUni = array_unique($tag);
https://stackoverflow.com/questions/41076802
复制相似问题