Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 添加、删除和更新网页中注释的标记_Php_Mysql - Fatal编程技术网

Php 添加、删除和更新网页中注释的标记

Php 添加、删除和更新网页中注释的标记,php,mysql,Php,Mysql,我正在为一个网页构建一个评论功能,其中所有评论都可以有任意数量的标签(不是HTML标签,而是像这里这样的标签,不允许重复),并且任何人都可以更新这些标签 假设一些注释包含标记[tag1,tag2,tag3],而有人添加了一个标记tag4,删除了tag2。现在,我如何检查哪一个旧标记不在新标记集中,以及可能添加了哪些标记 我有表comments,其中包含id和comment列(除其他外,与此问题无关)和comment\u标签表,其中包含id、tag和comment\u id列 我可以将所有的旧标签

我正在为一个网页构建一个评论功能,其中所有评论都可以有任意数量的标签(不是HTML标签,而是像这里这样的标签,不允许重复),并且任何人都可以更新这些标签

假设一些注释包含标记
[tag1,tag2,tag3]
,而有人添加了一个标记
tag4
,删除了
tag2
。现在,我如何检查哪一个旧标记不在新标记集中,以及可能添加了哪些标记

我有表
comments
,其中包含
id
comment
列(除其他外,与此问题无关)和
comment\u标签
表,其中包含
id
tag
comment\u id

我可以将所有的旧标签放到给定的注释中,然后循环遍历该数组,并使用每个标签检查新标签集中包含的标签。如果没有,请删除该标记。然后循环遍历新的标记集,检查旧标记集中包含的每个新标记。如果没有,则将该标记添加到
comment\u tags
表中

不知何故,这听起来太慢了,我想有更好的方法来做到这一点。这是我最初的想法:

$db = new Database();
$purifier = new HTMLPurifier();

$existing_tags = $db -> get_comment_tags($_POST['comment_id']);

$new_tags = $purifier -> purify($_POST['tags']);
$new_tags = explode(" ", $new_tags);
$new_tags = array_unique($new_tags);

/* Delete tags that were not included in the new set of tags */
foreach ($existing_tags as $tags => $tag) {
    if (!in_array($tag['tag'], $new_tags)) {
        $db -> delete_comment_tag($existing_tags[$tags]['id']);
    }
}

/* Since get_comment_tags returns array which contains arrays, 
let's strip unnecessary info */
$filtered_existing_tags = array();
foreach ($existing_tags as $key => $value) {
    $filtered_existing_tags[] = $value['tag'];
}

/* Add tags that were not included in the old set of tags */
foreach ($new_tags as $key => $value) {
    if (!in_array($value, $filtered_existing_tags)) {
        $db -> add_comment_tag($_POST['comment_id'], $value);
    }       
}

我通常只需在
posts\u tags
表上运行两个SQL查询即可完成此操作:一个用于删除当前链接到帖子的所有标记,另一个用于插入所有当前有效的标记

是的,也许我就是这么做的。听起来不太容易出错,虽然我必须在数据库端删除和插入很多。如果直接查询mysql,可以在一个查询中插入所有标记,传递不同的值组。