Разнесли в пух и прах:) Я только учусь, делаю это самостоятельно и для общего развития))
Последний вопрос, как передать в БД множественный выбор select, если вас не затруднит объяснить document.getElementById('myForm').addEventListener('change', function(e) { let elm = [...e.currentTarget.elements], prt = elm[0].selectedIndex, set = 'Вы выбрали: ' + elm[0].options[prt].text; if(e.target == elm[0]) elm.slice(1).forEach(function(e, i) { e.style.display = i == prt - 1 ? 'block' : 'none' }); [...elm[prt].options].forEach(function(e) { if(e.selected) set += '; ' + e.text }); document.getElementById('selection').textContent = set; }); |
Цитата:
Пусть вы решили в простом блокноте записывать события. Будем считать, что дата события, это его уникальный идентификатор. Если вы будет записывать в блокнот только даты, без описания самого события, сможете ли вы спустя время сказать, что за событие скрывается за каждой датой? Цитата:
То что я писал по базе, вроде бы и много написано, но если говорить в целом, то это малая толика и то обобщенная. И списки мной описанные будут выполнять свою роль только в идеальном случае, стоит в базе появится второй категории верхнего уровня и будут ошибки. Но я же не могу описывая только суть вещей писать все. Там описано ради того, чтобы понять - база, это "не склад", это архитектура хранящая в себе данные различных типов, структуры, а также связи между ними. И у вас должна быть такая архитектура базы, чтобы обеспечивать оптимальную работу приложения, то есть, клиент<--->сервер. Хотите использовать базу, значит имейте базу какой она должна быть, а не "блокнот для пометок". И обязательно найти в сети и прочесть, что такое "нормализация баз данных", так как это понятие тесно связано с вашим вопросом. Если бы ваш вопрос был в рамках практического, имеющейся структуры базы, то можно ответить просто - два способа, в цикле запрос к базе помещаются в нее данные. Но реляционная база данных, которую вы хотите использовать, это сервер, и выполнять запись в нее множеством запросов к ней, это расточительно. А просто набор данных поместить в одну таблицу в SQL можно одним запросом, это она позволяет. Синтаксис такого запроса в упрощенном виде прост: INSET INTO table_name (field) VALUES (value), (value), (value), ..., (value) где - field, это имя поля таблицы, в которое производится запись, а value, значения элементов массива. Подготовленное таким образом тело запроса (строка) выполняется запросом к базе, и это будет один запрос к ней. Результатом этого запроса будет N строк записей в таблице. Массив данных можно хранить в базе и в одном поле как строку представляющую собой JSON. Хотя не так давно MySQL и работает с таким типом данных, не стоит использовать этот тип для данных, например, значения которых используются как параметры выборки и т.п. Так как этим данным требуются предварительные преобразования, а это увеличивается и нагрузку, и время на обработку запроса. Таким набором удобно хранить, например, какие либо параметры конфигурации - запросили, извлекли, преобразовали, используем. Не зная "контекст окружения" вашего вопроса сложно на него ответить. Здесь может быть только встречный вопрос - а что такое у вас массив данных, его назначение? Например, пользователь выбирает товар на странице, и выбрал несколько, поместив их в корзину. Это множественный выбор? Да. Это массив данных? Да. А как такой массив пишется в базу? Да просто, как выше было написано. Главное тут не механизм записи, а как эти записи хранят в базе. Товары из корзины превратятся в заказ, а заказ, это покупатель, которые описываются в базе таблицей/набором таблиц. Товары в свою очередь также описаны в своей таблице/наборе таблиц. Заказы также имеют свою таблицу/набор таблиц. Если в таблице заказов писалось бы для покупателя Иванова, купившего халат, тапочки и полотенце: Заказ №5, покупатель Иванов, адрес ...., тапочки, цена 200, количество 2 штука, итого 400 Заказ №5, покупатель Иванов, адрес ...., халат, цена 1500, количество 1 штука, итого 1500 Заказ №5, покупатель Иванов, адрес ...., полотенце, цена 340, количество 3 штука, итого 1020 это было бы очень расточительно. Поэтому, в таблицу заказов пишется только - его номер как уникальный идентификатор, идентификатор покупателя из таблицы покупателей, дата поступления заказа, статус заказа. С этой таблицей связана таблица товаров заказа, которая содержит номер заказа, идентификатор товара из таблицы товаров, количество товара. Сделав запрос по таблице заказов с вложенными подзапросами к связанным таблицам, можно получить всю информацию о заказе. И это и есть суть "нормализации баз данных". Что из вышесказанного есть ответ на ваш вопрос? Вот и я не знаю как на него ответить, не понимая что за ним стоит. |
Спасибо за такое подробное объяснение. НО всё же... Допустим есть таблица "оборудование". В ней есть много колонок, нас интересуют только две: "Тип" и "Описание". Тип имеет моно-выбор, Описание - мульти. Код, который вы помогли мне составить выше - работает. Но заносит в колонку "Описание" только последний выбранный элемент, хотя я выбираю несколько. Как это исправить? Не на теории, а на практике, сам я не дойду:write:
<style> .second { display: none; } </style> <form id="myForm"> <select id="Dest" class="Validate_Required " name="Dest" aria-required="true"> <option value="" disabled="" selected="selected">-</option> <option value="1">Оборудование 1</option> <option value="2">Оборудование 2</option> <option value="3">Оборудование 3</option> <option value="4">Оборудование 4</option> </select> <select class="second" size="3" multiple> <option value="0">1.1 текст</option> <option value="1">1.2 текст</option> <option value="2">1.3 текст</option> </select> <select class="second" size="3" multiple> <option value="0">2.1 текст</option> <option value="1">2.2 текст</option> <option value="2">2.3 текст</option> </select> <select class="second" size="3" multiple> <option value="0">3.1 текст</option> <option value="1">3.2 текст</option> <option value="2">3.3 текст</option> </select> <select class="second" size="3" multiple> <option value="0">4.1 текст</option> <option value="1">4.2 текст</option> <option value="2">4.3 текст</option> </select> </form> <div id="selection"></div> <script> document.getElementById('myForm').addEventListener('change', function(e) { let elm = [...e.currentTarget.elements], prt = elm[0].selectedIndex, set = 'Вы выбрали: ' + elm[0].options[prt].text; elm.slice(1).forEach(function(e, i) { e.style.display = i == prt - 1 ? 'block' : 'none' }); [...elm[prt].options].forEach(function(e) { if(e.selected) set += '; ' + e.text }); document.getElementById('selection').textContent = set; }); </script> |
Я не знаю как еще вам объяснить, что такое база данных, так как то что вы пытаетесь в нее записать к базе может иметь опосредованное отношение, ибо такого что у вас списках база содержать не может.
Я уже писал, что данные списков, это: value - уникальный идентификатор в таблице базы, и значения 0 этот идентификатор не может иметь, текст опций - это текст у каждого уникального значения в таблице. У вас куча списков, у которых одни и те же значения в опциях, да еще и равные 0. Ни один из списков не имеет имени, и как это, и с чем связано в базе, кроме вас и всевышнего не знает. Поля формы не имеющие имен на сервер не отправляются, то есть, отправление вашей формы, это получение сервером только списка (его значения) name="Dest". И я уже писал, что первичной задачей записи в базу является не сам механизм записи, он зачастую прост, а куда и по каким условиям пишутся данные. Я не вижу в ваших списках ни связей, ни логики, и не понимаю чего вы вообще хотите, и что у вас там за база при этом, можно только догадываться. И что я вам еще могу сказать на очередной вопрос? Собственно нечего. |
Цитата:
В таблице есть строки (записи). Каждая строка состоит из полей (столбцов). Каждое поле имеет тип (число, строка, дата...) Ну и смысл какой то - что означает это поле (количество чего то, идентификатор чего то, название чего то...) Вот определите - что содержится в поле "Тип". Что содержится в поле "Описание" (какого типа данные, как потом используются) Что означает строка этой таблицы - позиция заказа? |
Спасибо вам, что уделяете время на такие подробные разъяснения.
Цитата:
А все таки интересно как сделать, чтобы ранее выбранные опции в списках second сбрасывались при изменениях в списке Dest? |
select.value = "", где select, список выбранные опции которого нужно сбросить.
|
Цитата:
|
Цитата:
|
Oscillococcinum,
или это продолжение о списках изначально показанных и коде обработчике их изменения, что я писал? Тогда просто замените эту строку кода в нем: e.style.display = i == prt - 1 ? 'block' : 'none'; на if(i == prt - 1) e.style.display = 'block'; else { e.value = ''; e.style.display = 'none'; } |
Часовой пояс GMT +3, время: 11:32. |