【问题标题】:How to let users add multiple tags using PHP and MySQL?如何让用户使用 PHP 和 MySQL 添加多个标签?
【发布时间】:2009-12-06 13:12:26
【问题描述】:

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

是否有教程可以告诉我如何做到这一点,或者有人可以给我几个可以参考的例子。

谢谢

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    假设这样的架构:

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

    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);
    }
    

    【讨论】:

      【解决方案2】:

      通常你会为标签做的帖子映射是有一个标签表,一个帖子表,然后是第三个表,用于存储它们之间的配对:

      tagid tagname
      -------------
      1     foo
      2     bar
      
      postid posttitle
      -------------
      1      test
      2      beep
      
      tagid postid
      -------------
      1     2
      2     1
      2     2
      

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

      【讨论】:

      • 问题不在于规范化,而是事实上如何使用 CSV 输入进行规范化?
      • 我正在寻找更多如何让用户添加多个标签并将它们分开并存储它们。我已经设计好了数据库。
      • 啊。在这种情况下,explode() 可能是解析字符串的最简单方法。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-27
        • 1970-01-01
        • 2019-03-14
        相关资源
        最近更新 更多