Checkbox — добавление массива в БД

Имеется список категорий

Категория1
Категория2
Категория3

Для создания поста выбираю 2 категории 1 и 2 например, нужно занести в базу данных их идентификаторы(1,2).
Как это реализовать?

1 ответов


Если количество категорий-чекбоксов ограничено и неизменно (согласно текущей логике), то лучшим решением было бы сделать на каждую категорию по одному полю в таблице постов. Проставлять 1 в поле таблицы, если соответствующий чекбокс отмечен, иначе 0. Изменение категорий - апдейт соответствующей строки таблицы постов.

Если категорий много и их состав может время от времени меняться, то лучше их вынести в отдельную таблицу с полями: ID категории, Название категории, Тип и прочие атрибуты категории (если есть). Очевидно, связь таблицы постов к таблице категорий "многие-ко-многим" (т.к. в посте можно выбрать более одной категории и разные посты могут иметь одну и ту же категорию). Тогда нужна дополнительная таблица связей постов и категорий, состоящей из двух полей: ID поста, ID категории. Тогда при добавлении/снятии галок с чекбоксов вам надо добавлять/удалять строки из таблицы связей, т.е. действие выполняется в два SQL-запроса.


извлекаем из поля базы данных


массив = explode(",", значение поля базы данных)
 


кладем в базу

implode("," ,  массив значений)
 


$array = array('1', '2', '5');
$comma_separated = implode(",", $array);

echo $comma_separated; // 1,2,5
 

Я немного по другом решил эту проблему.
Открывается файл - Заносятся данные с чекбоксов с помощью foreach - Открывается файл - Считываются значения - Запись в БД.


Как то всё по топорному. Стандартное решение:
есть таблица постов, например articles


article_id |           text         |
1                  article_text1
2                  article_text2
3                  article_text3
 
...
и сводная таблица пост-категория

article_id|category_id
1                  1
1                  2
1                  5
2                  1
2                  5
3                  5
 
По ид статтьи делаем выборку её категорий :)