【问题标题】:text input (seperated by comma) mysql input as array文本输入(用逗号分隔) mysql 输入为数组
【发布时间】:2012-06-05 23:29:28
【问题描述】:

我有一个表单,我正在尝试实现标签系统。

这只是一个:

<input type="text"/> 

值以逗号分隔。

e.g. "John,Mary,Ben,Steven,George"

(列表可以是用户想要的长度。)

我想获取该列表并将其作为数组插入到我的数据库中(如果需要,用户可以稍后在其中添加更多标签)。我想它不一定是一个数组,这似乎是最好的。

所以,我的问题是如何获取该列表,将其转换为数组,回显该数组(以逗号分隔的值),稍后添加更多值,并使该数组可供其他用户搜索。我知道这个问题看起来很简单,但无论我读了多少书,我似乎都无法理解这一切是如何运作的。一旦我认为我已经弄清楚了,就会出现问题。一个简单的例子将不胜感激。谢谢!

这是我目前得到的:

$DBCONNECT
$artisttags = $info['artisttags'];
$full_name = $info['full_name'];
$tel = $info['tel'];
$mainint = $info['maininst'];
if(isset($_POST['submit'])) {
  $tags = $_POST['tags'];
  if($artisttags == NULL) {
    $artisttagsarray = array($full_name, $tel, $maininst);
    array_push($artisttagsarray,$tags);
    mysql_query("UPDATE users SET artisttags='$artisttagsarray' WHERE id='$id'");
    print_r($artisttagsarray); //to see if I did it right
    die();
  } else {
    array_push($artisttags,$tags);  
    mysql_query("UPDATE users SET artisttags='$artisttags' WHERE id='$id'");
    echo $tags;
    echo " <br/>";
    echo $artisttags;
    die();
    }
}

【问题讨论】:

  • 你可以:将它作为字符串保存到数据库中。当用户在哪里添加更多标签时,当您检索数据时,您使用explode用逗号分隔它们并将它们存储在一个数组中,然后您将另一个标签添加为数组,然后将其保存回数据库时,您会内爆它将它们组合起来并用逗号分隔它们。
  • 太棒了!我会尝试一下。我觉得这听起来不错。
  • 不要那样做。如果要处理数据,请确保它已标准化。序列化数组并将其保存在一个字段中甚至会破坏第一范式!

标签: php mysql arrays search tags


【解决方案1】:

创建一个新表,我们称之为“标签”:

tags
- userid
- artisttag

每个用户在此表中可能有多行(每行有一个不同的标签)。查询时,您使用JOIN 操作来组合这两个表。例如:

SELECT username, artisttag
FROM users, tags
WHERE users.userid = tags.userid
AND   users.userid = 4711

这将为您提供 ID 为 4711 的用户的所有信息。

关系数据库系统专为此类工作而构建,因此不会浪费空间和性能。事实上,如果您希望能够搜索标签,这是执行此操作的最佳方式。

【讨论】:

  • 很高兴知道。我没有想过要建立一个新的数据库。我认为这会很好用!
  • 我建议你拿起一本关于数据库设计的书,因为这真的很重要。人们在试图破解这些重要概念时常常难以理解连接和规范化,并编写糟糕的代码。
  • 您可以在 HTML 表单中的一个文本字段中包含所有标签,而在 PHP 中 explode 它。
  • 太棒了。谢谢!有什么书推荐吗?
  • 不幸的是,我只读过有关该主题的瑞典书籍,但那里应该有很多。一些以英语为母语的人可能会为您提供帮助 :-) 不要期望一次掌握所有概念 - 花点时间学习一下!
猜你喜欢
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 2023-04-05
  • 2018-12-10
  • 1970-01-01
相关资源
最近更新 更多