Я пытаюсь вставить несколько тегов в базу данных.
Я использую плагин TokenInput для сбора тегов пользователей.
Я получаю строку тегов, разделенных запятой, например:
if($_POST) {
$data = $_POST['tags'];
$tags = explode(",", $data);
$snap = 6;
echo $data;
}
Данные поступают из функции AJAX. При отображении $ data я получаю строку вроде этой:
Zara, 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')");
}
}
Этот код вставит пустые значения в тэг. Есть ли у вас какие-либо предложения, что я должен изменить, чтобы сделать эту работу? Должен ли я переписать код цикла?
Спасибо за любую помощь.
Удалось это сделать. Это было довольно легко, надо было подумать об этом перед публикацией.
Итак, мой код сейчас:
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')");
}
}
При этом я могу вставить столько тегов, сколько есть внутри массива.
Надеюсь, кто-нибудь найдет это полезным однажды.
Спасибо
Вы можете использовать более оптимальную пакетную вставку, а также исправить генерацию строки значений 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);
}