Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обработать несколько input (https://javascript.ru/forum/events/72076-obrabotat-neskolko-input.html)

laimas 07.01.2018 04:11

Цитата:

Сообщение от Dbnfkbq
Устройство - какой либо счетчик, у которого надо записать дату изготовления, снять показатели с него...

Имелось ввиду не техническая штука сама по себе, а элемент формы ее определяющий, если речь шла о "больше 1", и требуется код это выполняющий.

Собственно вам кроме показанной структуры описывающей прибор нужна еще и кнопка "Добавить", по щелчку на которой клонировать первый элемент ".devices" (надо полагать, что хотя бы один прибор в форме должен быть), найти в клонированном список и поля ввода, сбросив их значения, после чего клонированное добавить в форму.

Но, поля формы не имеющие имен на сервер преданы не будут, а у вас ни одно поле не имеет имени, хотя идентификаторы ненужные имеют все. Идентификатор является уникальным значением, а при клонировании он будет дублироваться. Поэтому все идентификаторы выбросить.

Как именовать поля формы зависит от того, как они будут разбираться на сервере, то есть какой на сервере язык программирования используется. К примеру в РНР есть возможность самостоятельно ковырять сырые данные формы. Но проще получить уже готовое из массивов $_GET/$_POST, в которые РНР сам поместит данные пришедшей формы. При клонировании полей формы будут клонированы и их имена, а это будет означать, что в массив будут поступать одни и те же ключи. Так как в массиве не может быть дубликатов ключей, то РНР будет перезаписывать данные одноименных ключей. В итоге в массиве останутся значения последних одноименных полей формы. Чтобы этого не произошло поля формы можно именовать как элементы массива. Например список Тип так:

<select class="form-control" name="type_device[]">

Поле класса точности

<input type="text" class="form-control" name="class_tochnost[]" placeholder="Класс точности" required>

и т.п. Если форму отправить методом POST, то в массиве $_POST под ключами type_device и class_tochnost будут индексные массивы значений этих полей с количеством равным добавленных в форму полей. Как примечание: type_device и при этом class_tochnost, это как жаргон гопника на вечеринке деятелей искусства. ;)

Что касается сохранения массива в базе, то не каждая база может хранить в себе массив как структуру. Самый дешевый вариант, как бесплатный, практически на всех хостах имеющийся, это MySQL, у которой нет типа Array, и записать в себя массив она не может. Но по большому счету этого и не требуется в данном случае. Кроме этого, форму содержащую помимо элементов описывающих множество устройств, которые кому-то как-то принадлежат, и эти "хозяева" также оперируют в форме, никак нельзя впихнуть в одну sql-таблицу.

Если есть вопрос "Потом в итоге заполненную форму в виде массива в БД отправлять? Или как с ним работать?" значит у вас вообще ничего нет, либо вы так далеки от этого, что ... А ведь приложение нужно начинать с проектирование БД, ибо она как матка в улье, скрипты же, это рабочие пчелы ее обслуживающие, а формы, это трутни ее оплодотворяющие. У вас получается, что матки нет, но есть трутни. :)

Dbnfkbq 08.01.2018 11:23

Хорошо, спасибо. Все замечания учту и исправлю.
С именами да, понимаю, оправдание, что полей много, а воображение и память англ слов заканчивалась хоть и ужасное, но есть :) При исправлении id на name все учту.
По поводу БД, вы, конечно, правы. Не отрицаю, что далек от этого, с БД мне еще не приходилось работать (точнее связывать с БД что-либо), но есть задача разобраться в этом.
Исправлю все замечания, попытаюсь красиво реализовать клонирование, составлю БД, а потом буду обращаться сюда снова :help:

Dbnfkbq 09.01.2018 14:57

Цитата:

Сообщение от laimas (Сообщение 474412)
Если есть вопрос "Потом в итоге заполненную форму в виде массива в БД отправлять? Или как с ним работать?" значит у вас вообще ничего нет, либо вы так далеки от этого, что ... А ведь приложение нужно начинать с проектирование БД, ибо она как матка в улье, скрипты же, это рабочие пчелы ее обслуживающие, а формы, это трутни ее оплодотворяющие. У вас получается, что матки нет, но есть трутни. :)

Здравствуйте, по ходу исправлений возникла идея, что если при помощи select давать пользователю выбор, сколько устройств необходимо описать, и при переходи на следующий шаг, их кол-во уже будет создано(если это возможно). Как мне это видится: мы получаем цифру (кол-во устройств) из select, затем с помощью массива, где длинной будет это кол-во создать форму с name[i]. Это возможно?

Dbnfkbq 10.01.2018 15:01

Получилось реализовать, как хотел. Спасибо.
Получилось так:
function class_clone(c_clone) {
            if (c_clone == 1)
                $(".device_num").text("Прибор №1");
            else {
                for (var i = 0; i < c_clone-1; i++)
                    $(".devices").clone().addClass("newElement").appendTo("#third_step .form");
            }
        }


Добавляю новый класс, так как если копировать придется 3 раза, будет копироваться класс с уже одной копией

laimas 10.01.2018 15:54

Зачем список для выбора, если надо добавить, добавили, надо еще один, добавили, а нужно удалить добавленное, тоже не проблема.

Dbnfkbq 10.01.2018 16:50

Цитата:

Сообщение от laimas (Сообщение 474686)
Зачем список для выбора, если надо добавить, добавили, надо еще один, добавили, а нужно удалить добавленное, тоже не проблема.

Да, уже это понял, получилось все сделать как нужно.

Dbnfkbq 10.01.2018 17:01

Цитата:

Сообщение от laimas (Сообщение 474686)
Зачем список для выбора, если надо добавить, добавили, надо еще один, добавили, а нужно удалить добавленное, тоже не проблема.

Подскажите, как мне теперь обработать данные в php (как получить все данные), и, на данном этапе, вывести их в файл каждый с новой строки?

laimas 10.01.2018 17:22

Зачем в файл и каким образом? Я писал каким образом поля формы можно именовать, чтобы оперировать ими на сервере. Что у вас делается я не знаю.

Dbnfkbq 12.01.2018 14:02

Цитата:

Сообщение от laimas (Сообщение 474715)
Зачем в файл и каким образом? Я писал каким образом поля формы можно именовать, чтобы оперировать ими на сервере. Что у вас делается я не знаю.

Я дал всем имена, как вы сказали, я спрашиваю про то, как мне их в виде массива теперь получить, чтобы работать с ними?

laimas 12.01.2018 14:36

$_POST или $_GET в зависимости от метода передачи.


Часовой пояс GMT +3, время: 09:16.