2012-05-31 3 views
0

У меня есть форма, где я пытаюсь реализовать систему тегов.ввод текста (разделенный запятой) mysql input as array

Это просто:

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

хорошо вы можете: сохранить его в базе данных в виде строки. и когда пользователь, который добавляет больше тегов, затем, когда вы извлекаете данные, которые используете, используется для разделения их запятой и хранения их в массиве, и там вы добавляете другой тег в виде массива, а затем при сохранении его обратно в базу данных, которую вы взорвали он их объединяет и разделяет запятыми. – magicianiam

+0

Отлично! Я попробую. Я думаю, что это здорово. –

+0

Не делайте этого. Если вы хотите работать с данными, убедитесь, что они нормализованы. Сериализация массива и сохранение его в одном поле прорвут даже первую нормальную форму! –

ответ

0

Создать новую таблицу, давайте назовем это «метки»:

tags 
- userid 
- artisttag 

Каждый пользователь может иметь несколько строк в этой таблице (с одним другом тег в каждой строке). При запросе используется операция JOIN для объединения двух таблиц. Например:

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

Это даст вам всю информацию о пользователе с идентификатором 4711.

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

+0

Это полезно знать. Я не думал о создании новой базы данных. Я думаю, что будет отлично работать! –

+0

Я рекомендую вам выбрать книгу по теме проектирования базы данных, потому что это действительно важно. Люди часто борются за понимание объединений и нормализации и пишут ужасный код, пытаясь взломать эти важные концепции. –

+0

Вы можете иметь все теги в одном текстовом поле в форме HTML и «взрывать» его в PHP. –

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