Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404

POST с формы со связанными динамичесскими данными (массивы) и последующая его обработка

14.05.2015, 20:45. Показов 803. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые! Возникла некая (интересная [тупая]) задачка...
Если кратко, то суть такова. Есть форма, большая форма, ооочень большая форма ) в которой кроме всего прочего нужно ввести переменные данные ( которые связаны между собой ) некого объекта, т.е. чисто схематически это выглядит так :
[Имя параметра 1] =>
[
[Имя переменной 1] => [[значение переменной 1] , [значение переменной 2] ],

[Имя переменной 2] => [[значение переменной 1] , [значение переменной 2] ],
],
[Имя параметра 2] =>
[
[Имя переменной 1] => [[значение переменной 1] , [значение переменной 2]] ,

[Имя переменной 2] => [ [значение переменной 1] , [значение переменной 2] ] ,
]

Причем кол-во имен параметров и их переменных ничем не ограничего, жмем "+" сы в форме и оно добавляется

Собственно сам кусок формы
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<div class="add-block">
            <label>Добавить элемент</label>
            <button class="addParamsElement" onclick="return false;"> <i class="fa  fa-plus"></i> </button>
        </div>
        
        <div class="box box-info params-group">
            <div class="box-header"><h3 class="box-title"></h3></div>
               <div class="box-body">
                    <div class="add-item-block">
                        <label>Добавить Переменную</label>
                        <button class="addParamsItem" onclick="return false;"> <i class="fa  fa-plus"></i> </button>
                    </div>
                    <div class="rem-item-block">
                        <label>Удалить набор параметров</label>
                   <button class="removeElem" onclick="return false;" title="Удалить набор параметров"> <i class="fa  fa-minus"></i> </button>
                    </div>
                   <div class="form-group">
                        <div class="row">
                            <label class="control-label col-sm-3" for="param_name">Наименование параметра</label>
                                <div class="col-sm-4">
                                    <input id="param_name" class="input form-control" type="text" maxlength="255" value="" name="Object[params][name][]">
                                </div>
                                <div class="help-block help-block-error col-sm-5"></div>
                        </div>
                   </div>
                    <hr/>
                   <div class="panel panel-default">
                        <div class="panel-heading"> 
                            <span class="name"></span>
                         <div class="rem-item-elemet-block">
                            <label>Удалить параметр</label>
                            <button class="removeItemElem" onclick="return false;" title="Удалить параметр"> <i class="fa  fa-minus"></i> </button>
                        </div>
                        </div>
                      <div class="panel-body">
                            <div class="form-group">
                                    <div class="row">
                                        <label class="control-label col-sm-3" for="var_p_n">Наименование переменой параметра</label>
                                            <div class="col-sm-4">
                                                <input id="var_p_n" class="input form-control" type="text" maxlength="255" value="" name="Object[params][var_name][]">
                                            </div>
                                        <div class="help-block help-block-error col-sm-5"></div>
                                    </div>
                            </div>
                          
                            <div class="form-group">
                                    <div class="row">
                                        <label class="control-label col-sm-3" for="var_n">Значение переменой параметра</label>
                                            <div class="col-sm-4">
                                                <input id="var_n" class="input form-control" type="number" step="0.1" maxlength="255" value="" name="Object[params][float][]">
                                            </div>
                                        <div class="help-block help-block-error col-sm-5"></div>
                                    </div>
                            </div>
                      </div>
                   </div>
                </div>
            </div>
НО! При таком раскладе мы получим массив значения которых невозможно связать друг с другом
PHP
1
2
3
name => [ 'a' , 'b' ],
var_name => ['a1' , 'a2' , 'b1' , 'b2'],
float => [ 1.1 , 1.3 , 1.7 , 1.4 ],
а1 , а2 ; 1,1 , 1,3 - относится к "а", остальное к б соотв.
Создать массив для POST необходимой иерархии я так и не смог ((
Кроме того эти записи нужно не только вставлять транзакцией но и обновлять т.к. в таблицах данные связаны по ключам.
#######
Есть ли какой-то хак для того чтобы на этапе отправки данных сформировать массив необходимой структуры ?
Или может быть иное более изящное решение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2015, 20:45
Ответы с готовыми решениями:

Заполнить файл случайными числами и его последующая обработка
Записать в файл N случайных чисел. Найти разность первого и последнего элемента файла. N-случайное число, не превышающее 100.

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

Заполнение файла случайными числами и его последующая обработка
Добрый день! Необходима помощь в задании. &quot;Заполнить текстовый файл целыми числами, полученными с помощью генератора случайных чисел....

4
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
14.05.2015, 21:16
aJax или
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function buildElement(tagName, props) {
    var element = document.createElement(tagName);
    for (var propName in props) element[propName] = props[propName];
    return element;
}
 
function submit(link, props) {
    var form = buildElement('form', {method: 'post', action: link});
    for (var propName in props) form.appendChild( 
        buildElement('input', {type: 'hidden', name: propName, value: props[propName]})
    );
    document.body.appendChild(form);
    form.submit();
    document.body.removeChild(form);
}
 
submit('index.php', {name: 'Ivan', year: '25'});
0
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404
14.05.2015, 23:45  [ТС]
Poznakomlus, Оба варианта не подходят (( Имхо - лепить еще и аякс - тот кто не дай бог будет потом заниматся после меня согнет туфли раз 100500 ибо форма имеет 3 бихейвора (yii2) 2 из которых с файлами работают и 1 мультизадачный обрабатывает данные для 4 - х таблиц, + еще и аякс или дубликат формы ... Впринципе, вопрос отправки как один из вариантов попробовал сделать последовательным массивом по типу -
HTML5
1
<input id="param_name" class="input form-control" type="text" maxlength="255" value="" name="Object[params][][name]">
Тогда все элементы выстраиваются в порядке их размещения в форме и можно поэлементно по ним пройтись и сложить в нужной иерархии...
Открытым остается вопрос как различить добавление новых / удаление элементов или обновление старых
0
Эксперт PHP
 Аватар для Fedor Vlasenko
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
15.05.2015, 00:22
я в данном случае создаю объект с вложенными объектами и кидаю его аяксом на сервер
на сервер обрабатываю запросов да много но таким образом не приходится постоянно сохранять состояние когда нажали кнопочку запись и сохранили наш заказ, и его изменения
JavaScript
1
2
3
var obj = {add: {}, upd: {}, del: {} };
//пример отправили все аяксом
$.post('mypage.php', obj, function(res){/* обработали ответ res он в json будет*/}, 'json');
0
88 / 88 / 34
Регистрация: 22.05.2012
Сообщений: 404
15.05.2015, 01:07  [ТС]
Спасибо за интузиазм но аякс как я и раньше говорил не катит (( Это жеж не форма заказа, а админ часть сайта, 1 форма, 15 вкладок (табсов) 10 разных картинок, 3 файла и куева туча данных + эти переменные... Если делать аякс тогда нужно перед отправкой

Добавлено через 8 минут
Сорри пока писал, забагало меня (( Продублирую
Спасибо за интузиазм но аякс как я и раньше говорил не катит (( Это жеж не форма заказа, а админ часть сайта, 1 форма, 15 вкладок (табсов) 10 разных картинок, 3 файла и куева туча данных + эти переменные... Если делать аякс тогда нужно перед отправкой формы пройтись по этому куску формы, вырвать ее части, сложить js ом в нужный массив и отправить на другой контроллер, получив ответ удалить этот кусок формы запустить сабмит самой формы... Я думал есть решения по проще (( Тогда легче во время добавления элементов пройтись по ним и изменить "name" добавив в них индексы, а во время редактировния добавить hidden с текущим ID поля из 2-х таблиц

Добавлено через 1 минуту
Хотя это так же не решает проблемму ((

Добавлено через 7 минут
Хоть и костылЪ в неком роде но последовательный POST можно сложить и записать таким макаром
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$_data = \Yii::$app->request->post('Object' , false);
        
        $_db = \Yii::$app->db;
        
          
    if(!$_data['params'] || empty($_data['params'][0]['param_name'])) return;
        
        $_data = $_data['params'];
        
        
        $recordID = $this->owner->id;
        
        $itemsModel = new ObjectItemsPropCollections;
        $propModel  = new ObjectItemsProp;
     
          
        $__parray = [];
        
        $z = 0;
              
       
        for($k = 0; $k < sizeof($_data); $k ++){
            
            if(isset($_data[$k]['param_name'])){
               $z++;
            }
           
            $__parray[$z][] =  $_data[$k];
            
        }
        
        foreach ($__parray as $_p){
         $paramStmt = $_db->createCommand()->insert($propModel::tableName(), [  'object_id' => $recordID ,  'param_name' => pos($_p[0])])->execute();  
         $lastId = $_db->getLastInsertID();
            unset($_p[0]); 
            
            for($j = 1; $j <= sizeof($_p) ; $j++){
                if(key( $_p[$j] ) == 'param_var_name'){
                    
                     $var[] = [ $lastId ,  $_p[$j]['param_var_name'] , $_p[$j+1]['float_var'] ];
                }
                
            }
                          
            $_db->createCommand()->batchInsert($itemsModel::tableName(), ['prop_id' , 'param_var_name' , 'float_var' ] , $var)->execute();
            unset($var);
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2015, 01:07
Помогаю со студенческими работами здесь

Заполнение файла случайными числами и его последующая обработка
Заполнить двоичный файл N действительными числами, полученными с помощью генератора случайных чисел. Найти сумму минимального и...

Заполнение файла случайными числами и его последующая обработка. Записать в текстовый файл N целых чисел, полу
Заполнение файла случайными числами и его последующая обработка. Записать в текстовый файл N целых чисел, полученных с помощью генератора...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru