繁体   English   中英

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

[英]How to let users add multiple tags using PHP and MySQL?

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

有没有可以向我展示如何执行此操作的教程,或者有人可以给我几个可以使用的示例。

谢谢

假设这样的模式:

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

Post Tag表是所谓的联接表,用于从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);
}

通常,您对tag <-> post映射所要做的是有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”

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM