如何让用户使用PHP和MySQL添加多个标签?

时间:2009-12-06 05:04:27

标签: php mysql

好的,所以我已经有一个脚本让用户输入标签,但我想让用户输入多个用逗号分隔的标签,例如(html, css, php),并将每个标签存储在数据库中。

是否有教程可以告诉我如何做到这一点,或者有人可以给我一些我可以使用的例子。

由于

3 个答案:

答案 0 :(得分:6)

假设这样的架构:

  • 发布(id,author_id,post_date,post_text);
  • 标签(id,tag_name);
  • 发布标签(id,post_id,tag_id)。

Post Tag表是所谓的连接表,用于从Post到Tag的多对多关系(因为Post可以有多个标签,并且可以在多个帖子上使用标签)

用户将逗号分隔的标签列表输入到输入字段中:

$tags = array_unique(array_map(explode(',', $POST['tags']), 'trim'));

你有一个用户输入的标签数组。您可能希望进一步清理它们,例如仅允许某些字符和/或将它们转换为小写字符。

然后您的代码变为:

$post_id = ...
foreach ($tats as $tag) {
  $tag = mysql_real_escape_string($tag);
  $sql = <<<END
INSERT INTO PostTag (post_id, tag_id)
VALUES ($post_id, (SELECT id FROM Tag WHERE tag_name = '$tag'))
END;
  mysql_query($sql);
}

答案 1 :(得分:3)

通常,您为标记&lt; - &gt;帖子映射执行的操作是有1个标记表,1个用于发布的表,然后是第三个存储它们之间配对的表:

tagid tagname
-------------
1     foo
2     bar

postid posttitle
-------------
1      test
2      beep

tagid postid
-------------
1     2
2     1
2     2

会有两个帖子,第一个标记为“bar”,第二个标记为“foo,bar”

答案 2 :(得分:0)

您可以使用PHP preg_split命令拆分多个标记的字符串,然后像现在一样将每个标记保存到数据库中。

以下代码将字符串“html,css,php”拆分为数组[“html”,“css”,“php”]:

$tag_string = "html, css, php";
$tags = preg_split("/[\s,]+/", $tag_string);