【发布时间】:2009-12-06 13:12:26
【问题描述】:
好的,所以我已经有了一个让用户输入标签的脚本,但我想让用户输入多个用逗号分隔的标签,例如(html, css, php),并将每个标签存储在数据库中。
是否有教程可以告诉我如何做到这一点,或者有人可以给我几个可以参考的例子。
谢谢
【问题讨论】:
好的,所以我已经有了一个让用户输入标签的脚本,但我想让用户输入多个用逗号分隔的标签,例如(html, css, php),并将每个标签存储在数据库中。
是否有教程可以告诉我如何做到这一点,或者有人可以给我几个可以参考的例子。
谢谢
【问题讨论】:
假设这样的架构:
Post Tag 表是所谓的join table,用于从 Post 到 Tag 的多对多关系(因为一个 Post 可以有多个 Tag,一个 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);
}
【讨论】:
通常你会为标签做的帖子映射是有一个标签表,一个帖子表,然后是第三个表,用于存储它们之间的配对:
tagid tagname
-------------
1 foo
2 bar
postid posttitle
-------------
1 test
2 beep
tagid postid
-------------
1 2
2 1
2 2
会有两个帖子,第一个被标记为“bar”,第二个被标记为“foo, bar”
【讨论】:
explode() 可能是解析字符串的最简单方法。
您可以使用 PHP preg_split 命令拆分多个标签的字符串,然后像现在一样将每个标签保存到数据库中。
以下代码会将字符串“html, css, php”拆分为数组[“html”,“css”,“php”]:
$tag_string = "html, css, php";
$tags = preg_split("/[\s,]+/", $tag_string);
【讨论】: