На странице есть форма для пользователя со списком видов работ (чекбоксы). Пользователь может выбрать одно или несколько значений.
Вопрос:
Есть три таблицы:
Как правильно записывать информацию о выбранных чекбоксах для определенного id-пользователя?
При отправке формы поля input[type=checkbox] отправляются в виде name=value
в том случае, если они установлены. То есть если у нас есть
<form ...>
<input type="checkbox" name="service1" value="1">
<input type="checkbox" name="service2" value="1" checked>
<input type="checkbox" name="service3" value="1" checked>
</form>
то при отправке такой формы (услуга 2 и услуга 3 включены) мы увидим на сервере что-то вроде
?...&service2=1&service3=1
Читать такие вещи можно конструкциями вида (это просто пример, не думайте, что он хороший)
$service1 = isset($_GET['service1']) && $_GET['service1'] ? 1 : 0;
$service2 = isset($_GET['service2']) && $_GET['service2'] ? 1 : 0;
$service3 = isset($_GET['service3']) && $_GET['service3'] ? 1 : 0;
Громоздко и довольно ужасно
Есть второй, более удобный на мой взгляд вариант представления нескольких опций:
<form ...>
<input type="checkbox" name="service[]" value="service1">
<input type="checkbox" name="service[]" value="service2" checked>
<input type="checkbox" name="service[]" value="service3" checked>
</form>
Вместо service1 в значении поля флажка можно указать значение опции (например английское название, русское название, числовой код опции или номер артикула в каталоге)
На сервере такие вещи будут преобразованы сразу в массив значений:
$services = isset($_GET['service']) ? $_GET['service'] : array();
И вы можете работать с ним, как с массивом, через foreach и так далее
Второй вопрос касательно связи. Проще всего поступить через создание таблицы связей.
Если у вас есть сущность "пользователь" и у него может быть неизвестное количество "видов работ", то нужно организовать таблицу с полями "пользователь", "вид работ", "есть связь" (последнее поле не обязательно), можно просто создавать запись в таблице если связь есть, и не создавать - если ее нет
Работать с этим очень просто:
SELECT `service` FROM `links` WHERE `user_id` = N; /* Узнать виды работ для пользователя N */
SELECT `user_id` FROM `links` WHERE `service` = M; /* Узнать всех пользователей, для которых нужно выполнить работы M */
Однако будьте внимательны. Если "пользователь" заказывает работы регулярно, и может сделать заказ несколько раз с разным набором работ, то возможно нужна еще одна сущность - "заказ"
В этом случае "заказ" будет в отдельной таблице, он связан с пользователем по user_id
к примеру, а внутри "заказа" перечислены виды работ
Присмотритесь внимательнее к своей задаче, поймите ее, нарисуйте на листочке - что происходит и что может происходить, представьте себя на месте людей, который этим пользуются.. Словом - будьте программистом ) И все обязательно получится
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Создал рубрику 'original' (чтобы помечать индивидуальные статьи) в wordpress, которую хочу сделать скрытой для поиска и визуального отображения (для...
Добрый день при публикации поста , нагло обрезается тег iframe , публикуется пост через обычную textarea Как можно избавиться от обрезки тега