在PHP

时间:2016-03-15 21:08:03

标签: php mysql tags jquery-tokeninput

我正在尝试将多个标签插入数据库。 我正在使用TokenInput插件来收集用户的标签。 我得到一串用逗号分隔的标签,如下所示:

if($_POST) {
$data = $_POST['tags'];
$tags = explode(",", $data);
$snap = 6;
echo $data;
}

数据来自ajax函数。当回显$ data时,我得到一个这样的字符串:

扎拉,Allsaints

然后我继续通过explode()分离它们并循环创建的数组。

if($_POST) {
$data = $_POST['tags'];
$tags = explode(",", $data);
$snap = 6;

for($x = 0; $x < count($tags); $x++) {
    mysql_query("INSERT INTO tags (tagid, tagname, snapid) VALUES ('', '$tags[x]', '$snap')");
  }
}

此代码会将空值插入'tagname'。您是否有任何建议我应该更改以使其工作?我应该重写循环代码吗? 谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

管理这样做。这很容易,在发布之前应该多考虑一下。 所以我现在的代码是:

if($_POST) {
$data = $_POST['tags'];
$tags = explode(",", $data);
$snap = 6;

for($x = 0; $x < count($tags); $x++) {
    mysql_query("INSERT INTO tags (tagid, tagname, snapid) VALUES ('', '" . $tags[$x] . "', '$snap')");
  }
}

有了这个,我可以插入与数组内部一样多的标签。 希望有人会发现这有用的一天。 感谢

答案 1 :(得分:0)

您可以使用更优化的批量插入,并修复生成sql值字符串:

<?php

if($_POST) {
    $data = $_POST['tags'];
    $tags = explode(",", $data);
    $snap = 6;

    $values = array_map(function($item) use($snap) {
        return "('', '".$item."', '".$snap."')";
    }, $tags);

    $sql = "INSERT INTO tags (tagid, tagname, snapid) VALUES ".
        implode(",", $values);
    mysql_query($sql);
}