更新内部多重选择到数据库

时间:2016-12-10 18:10:45

标签: php mysql

我在更新数据库时遇到问题,它恰好将旧值旁边的新值添加到数据库中,例如

  • 当前数据库标签:tag1,tag2
  • 表格GET标签:[tag1] [tag2]
  • 表格编辑标签:[tag1] [tag2] [tag3] [tag4]
  • 更新的数据库标签: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>
    

1 个答案:

答案 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>数组中是否存在标记值,并相应地选择它

  • {li>

    $tags标记中缺少value个属性。

  • <option>操作放在SELECT操作下方,否则即使您使用表单更新代码,您也会从UPDATE操作中获取旧标记值

所以你的代码应该是这样的:

SELECT