2016-03-15 2 views
0

Я пытаюсь вставить несколько тегов в базу данных. Я использую плагин TokenInput для сбора тегов пользователей. я получаю строку тегов через запятую, например:Вставка нескольких тегов в базу данных в PHP

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

Данные поступают из АЯКС функции. Когда вторя $ данных я получаю строку, как это:

Zara, AllSaints

Тогда я продолжу, чтобы отделить их от взрываться() и цикл через созданный массив.

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

Этот код введет пустые значения в «тэг». Есть ли у вас какие-либо предложения, что я должен изменить, чтобы сделать эту работу? Должен ли я переписать код цикла? Благодарим вас за помощь.

ответ

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

Эй, спасибо за предложение. Я действительно не знаю, как использовать эту функцию array_map(). Кроме того, об этом: $ sql = "INSERT INTO теги (tagid, тэг, snapid) VALUES". implode (",", $ values); mysql_query ($ sql); Это не работает, и я ничего не получаю. – davidb

+0

'array_map' возвращает для каждого элемента модифицированного значения массива. В этом случае для каждого тега возвращается sql-строка со значениями для вставки. Функции php array_ * - это более крутой способ работы с массивами :) –

1

удалось это сделать. Это было довольно легко, должно было уделить больше внимания перед публикацией. Так что мой код теперь:

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

С этим я могу вставить столько тегов, как там внутри массива. Надеюсь, кто-нибудь найдет это полезным в один прекрасный день. Thanks

Смежные вопросы