我在更新数据库时遇到问题,它恰好将旧值旁边的新值添加到数据库中,例如
更新的数据库标签:tag1,tag2,tag1,tag2,tag3,tag4
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";
<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>
答案 0 :(得分:2)
您的代码存在一些问题,例如:
$tags
不是数组。请参阅while()
循环中的以下声明
$tags = $row['tags'];
因此,您无法在foreach
循环中使用它,例如 。使用explode()
函数拆分字符串并获取数组中的标记,如下所示:
$tags = explode(",",$row['tags']);
然后在表单中使用此$tags
数组,如下所述。
语法错误,
$tags = implode(",",$_POST['tags'];
^ missing closing )
即使您将标记作为数组(如上所述),您也不必使用那个 foreach
循环,它会不必要地追加额外的/ {1}}元素中的/ redundant标记。更好地使用in_array()
函数检查<select>
数组中是否存在标记值,并相应地选择它
$tags
标记中缺少value
个属性。
将<option>
操作放在SELECT
操作下方,否则即使您使用表单更新代码,您也会从UPDATE
操作中获取旧标记值
所以你的代码应该是这样的:
SELECT