Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Передача в PHP значений формы при динамическом добавлении
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » Передача в PHP значений формы при динамическом добавлении

Страниц (1): [1]
 

1. le7o - 14 Февраля, 2016 - 12:53:14 - перейти к сообщению
Есть страница с таблицей обрамленная тегами form в которую динамически добавляются строки с ячейками, добавляется таким образом:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. jQuery('.plus').click(function () {
  3.                             jQuery('.information_json_plus').before(
  4.                                 '<tr>' +
  5.  
  6.                                 '<td> <select name="doctype" class="form-control input-sm"><option value="">Select document</option>' +
  7.                                 "<?php foreach ($typedocs as $k => $val) echo "<option value='$val'>$val</option>";?>" + '<select> </td>' +
  8.  
  9.                                 '<td> <input type="text" name="docnum" placeholder="Enter number" value="" class="form-control input-sm"/> </td>' +
  10.  
  11.                                 '<td><input type="text" name="doc_issued" id="doc_issued"' + 'placeholder="Select dates" value=""' + '' +
  12.                                 'class="form-control input-sm date-picker_d"/></td>' +
  13.  
  14.                                 '<td><input type="text" name="doc_expiry" placeholder="Select dates" value=""' +
  15.                                 ' class="form-control input-sm date-picker_d"/></td>' +
  16.  
  17.                                 '<td><select name="doc_country" id="doc_country" class="form-control input-sm"><option value="">' + '' +
  18.                                 'Select country</option>' +
  19.                                 "<?php foreach ($Country as $k => $val) echo "<option value='$val'>$val</option>";?>" + '<select></td>' +
  20.  
  21.                                 '<td><input class="file input-id form-control input-sm" name="add_docs" type="file"/> </td>' +
  22.  
  23.                                 '<td><span class="btn btn-danger minus pull-right">&ndash;</span></td>' +
  24.                                 '</tr>'
  25.                             );
  26.  
  27.                             $(function () {
  28.                                 //Идентификатор элемента HTML (в данном случае инициализировать виджет "Bootstrap datetimepicker для класса"
  29.                                 $('.date-picker_d').datetimepicker(
  30.                                     {
  31.                                         format: 'YYYY-MM-DD',
  32.                                         keyboardNavigation: true,
  33.                                         autoclose: true,
  34.                                         pickTime: false,
  35.                                         language: 'en'
  36.                                     }
  37.                                 );
  38.                             });
  39.  
  40.                             // on - так как элемент динамически создан и обычный обработчик с ним не работает
  41.                             jQuery(document).on('click', '.minus', function () {
  42.                                 jQuery(this).closest('tr').remove(); // удаление строки с полями
  43.                             });
  44.  
  45.  



Каким образом можно все добавленные ячейки в таблицу записать в таблицу БД.
Пробовал $_POST массив формировать но он собирает значения только последней строки.

Может кому известен способ собирать значения форм?
2. le7o - 14 Февраля, 2016 - 15:26:01 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  if (isset($_POST['btnStepDocs']))
  2.     {
  3.         foreach ($_POST['doc_type'] as $k =>$docList)
  4.         {
  5.              foreach ($_POST['doc_num'] as $k =>$docNum) {}
  6.              foreach ($_POST['doc_issued'] as $k =>$docIssued) {}
  7.              foreach ($_POST['doc_expiry'] as $k =>$docExpiry) {}
  8.              foreach ($_POST['doc_country'] as $k =>$docCountry) {}
  9.              foreach ($_POST['add_docs'] as $k =>$docAdd) {}
  10.  
  11.             echo $docList ." ". $docNum ." - ". $docIssued ." - ". $docExpiry."-  ". $docCountry." - ". $docAdd."<br>";
  12.  
  13.         }


Пока что смог придумать только так, но меня смущает количество вложенных циклов...
Ну + ко всему вместо echo запрос на добавление записей в БД...
3. Viper - 14 Февраля, 2016 - 16:19:10 - перейти к сообщению
le7o пишет:
Пока что смог придумать только так, но меня смущает количество вложенных циклов...
Ну + ко всему вместо echo запрос на добавление записей в БД...

PHP:
скопировать код в буфер обмена
  1. echo '<pre>';
  2. print_r($_POST);
  3. echo '</pre>';

Что показывает?
4. le7o - 14 Февраля, 2016 - 16:24:53 - перейти к сообщению
CODE (html):
скопировать код в буфер обмена
  1.  
  2. Array
  3. (
  4.     [doc_type] => Array
  5.         (
  6.             [0] => Тип 1
  7.             [1] => Тип 2
  8.             [2] => Тип 3
  9.             [3] => Тип 4
  10.         )
  11.  
  12.     [doc_num] => Array
  13.         (
  14.             [0] => 111111
  15.             [1] => 22222
  16.             [2] => 33333
  17.             [3] => 444444
  18.         )
  19.  
  20.     [doc_issued] => Array
  21.         (
  22.             [0] => 2016-02-01
  23.             [1] => 2016-02-02
  24.             [2] => 2016-02-03
  25.             [3] => 2016-02-04
  26.         )
  27.  
  28.     [doc_expiry] => Array
  29.         (
  30.             [0] => 2016-02-21
  31.             [1] => 2016-02-15
  32.             [2] => 2016-02-16
  33.             [3] => 2016-02-17
  34.         )
  35.  
  36.     [doc_country] => Array
  37.         (
  38.             [0] => Страна 1
  39.             [1] => Страна 2
  40.             [2] => Страна 3
  41.             [3] => Страна 4
  42.         )
  43.  
  44.     [add_docs] => Array
  45.         (
  46.             [0] => 1.jpg
  47.             [1] => 1.jpg
  48.             [2] => 1.jpg
  49.             [3] => 1.jpg
  50.         )
  51.  
  52.     [btnStepDocs] =>
  53. )

(Добавление)
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['btnStepDocs'])) {
  2.         foreach ($_POST['doc_type'] as $k => $docList) {
  3.  
  4.             echo $docList . " " . $_POST['doc_num'][$k] . " - " . $_POST['doc_issued'][$k] .
  5.                 " - " . $_POST['doc_expiry'][$k] . "-  " . $_POST['doc_country'][$k] . " - " . $_POST['add_docs'][$k] . "<br>";
  6.         }
  7.     }


Пока такое решение на другом форуме подсказали - по крайней мере рабочее, но мне кажется, что не совсем правильное!?
5. Viper - 14 Февраля, 2016 - 18:21:22 - перейти к сообщению
le7o пишет:
Пока такое решение на другом форуме подсказали - по крайней мере рабочее, но мне кажется, что не совсем правильное!?
у вас изначально не правильно всё.
Почему у вас doc_country и иже с ними содержат несколько значений вместо одного выбранного? И каким образом вы собрались их записывать в БД?
6. le7o - 14 Февраля, 2016 - 19:47:01 - перейти к сообщению
Viper пишет:
le7o пишет:
Пока такое решение на другом форуме подсказали - по крайней мере рабочее, но мне кажется, что не совсем правильное!?
у вас изначально не правильно всё.


Цитата:
Почему у вас doc_country и иже с ними содержат несколько значений вместо одного выбранного?

Списки хоть и присутствуют, но значения из них берутся правильные...

Попытаюсь описать более подробно:

Есть две таблицы: users, docs у одного users может быть несколько записей из таблицы docs, поэтому при регистрации выводится форма с возможностью динамически добавить поля со значениями для таблицы docs:

После добавления и заполнения необходимого количества записей docs на форме с документами, форма посылается в php скрипт
поля формы выглядят как:
CODE (html):
скопировать код в буфер обмена
  1. <input type="text" name="doc_num[]">
, поэтому и формируется такой массив:
CODE (html):
скопировать код в буфер обмена
  1. Array
  2. (
  3.     [doc_type] => Array
  4.         (
  5.             [0] => Тип 1
  6.             [1] => Тип 2
  7.         )
  8.  
  9.     [doc_num] => Array
  10.         (
  11.             [0] => 111111
  12.             [1] => 22222
  13.         )
  14. )


То есть в данном случае получается, что пользователь на форме динамически добавил два докумена и заполнил значения как:
1-й документ: Тип 1 | 111111 |
2-й документ: Тип 2 | 22222 |


Цитата:
И каким образом вы собрались их записывать в БД?


После отправки формы, срабатывает следующий код, который в цикле заносит данные:
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['btnStepDocs'])) {
  2.         foreach ($_POST['doc_type'] as $k => $docList) {
  3.             $steps_user->AddDocs($crewID, array($docList, $_POST['doc_num'][$k], $_POST['doc_issued'][$k],
  4.                                  $_POST['doc_expiry'][$k], $_POST['doc_country'][$k], $_POST['add_docs'][$k]));
  5.         }
  6.     }


Занесение в цикле меня пугает больше всего т.к. документов может быть и 5 и 10.

Может есть более правильный способ работать с динамическими формами?

p.s.: результаты поиска вывели только на такой способ добавления динамических элементов, что бы было можно передать массив в PHP...

p.s.s: были конечно способы с помощью js, но думаю на данный момент не хватит знаний правильно это реализовать...
7. Viper - 14 Февраля, 2016 - 22:48:25 - перейти к сообщению
Тогда вам правильно подсказали на другом форуме. Можно взять за основу.

le7o пишет:
Занесение в цикле меня пугает больше всего т.к. документов может быть и 5 и 10.
это немного. Если больше, то тогда транзакции.

проверка не имеет смысла, т.к. можно послать даже не имея формы.
8. le7o - 15 Февраля, 2016 - 06:30:03 - перейти к сообщению
Viper пишет:
PHP:
скопировать код в буфер обмена
if (isset($_POST['btnStepDocs'])) {
проверка не имеет смысла, т.к. можно послать даже не имея формы.


У меня несколько форм странице, а обработкой занимается один файл(планирую сохранять без перезагрузки страницы писать) - поэтому и отслеживаю какую кнопку нажал пользователь.

Спасибо за помощь)
(Добавление)
p.s.: кнопку "спасибо" - не позволяет минимальное количество сообщений...

 

Powered by ExBB FM 1.0 RC1