esistema1 Опубликовано 21 января, 2019 Жалоба Поделиться Опубликовано 21 января, 2019 Всем здравствуйте!Помогите пожалуйста решить проблему.. Есть форма отправки заказа в СДЭК <form method="" name="osForm" id="osForm"> {foreach $order->purchases as $p} <div> <input name="numbercdek" value="{$order->id|escape}" class="ot12" id="numbercdek{$order->id}"> <input name="fiocdek" value="{$order->name|escape}" class="ot12" id="fiocdek{$order->id}"> <input name="phonecdek" value="{$order->phone|escape}" class="ot12" id="phonecdek{$order->id}"> <input name="pvzcdek" value="{$order->cdek_pvz}" class="ot12" id="pvzcdek{$order->id}"> <input name="skucdek" value="{$p->sku}" class="ot12" id="skucdek{$order->id}"> <input name="pricecdek" value="{$p->price|string_format:"%.0f"}" class="ot12" id="pricecdek{$order->id}"> <input name="pnamcdek" value="{$p->product_name}, {$p->variant_name}" class="ot12" id="pnamcdek{$order->id}"> <input name="citycdek" value="{$order->cdek_city}" class="ot12" id="citycdek{$order->id}"> <input name="citycodecdek" value="{$order->cdek_city_code}" class="ot12" id="citycodecdek{$order->id}"> </div> {/foreach} <div> <button name="button" type="button" onclick="sendcdek({$order->id})" data-order_id="{$order->id}" class="button_track">Создать заказ</button> </div> </form> И скрипт который ее отправляет {literal} <script> function sendcdek(order_id){ var numbercdek = $('#numbercdek'+order_id).val(); var fiocdek = $('#fiocdek'+order_id).val(); var phonecdek = $('#phonecdek'+order_id).val(); var pvzcdek = $('#pvzcdek'+order_id).val(); var skucdek = $('#skucdek'+order_id).val(); var pricecdek = $('#pricecdek'+order_id).val(); var pnamcdek = $('#pnamcdek'+order_id).val(); var citycdek = $('#citycdek'+order_id).val(); var citycodecdek = $('#citycodecdek'+order_id).val(); $.ajax({ type: "POST", url: "/test/cdek.php", data: {number:numbercdek, fiocdek:fiocdek, phonecdek:phonecdek, pvzcdek:pvzcdek, skucdek:skucdek, pricecdek:pricecdek, pnamcdek:pnamcdek, citycdek:citycdek, citycodecdek:citycodecdek} }).done(function( result ) { $("#status_pochta2"+order_id).val( result ); // $("#status_pochta"+order_id).html( result ); }); } </script> {/literal} Проблема в следующем: когда в заказе один товар, заказ формируется нормально.А вот когда более одного то post передает данные только по одному последнему товару. Как передать в post запрос все товары? Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 21 января, 2019 Жалоба Поделиться Опубликовано 21 января, 2019 Сейчас для нескольких товаров в форме одинаково называются поля, в результате значения затираются.Начать с того, что форму создавать правильно, например, name="numbercdek[]"... Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 Названия полей сделал уникальными <input name="skucdek[]" value="{$p->sku}" class="ot12" id="skucdek{$order->id}"> А что необходимо подправить в скрипте чтобы все заработало (сейчас также передается только 1 товар)? Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 Ни одна вариация не срабатывает... var numbercdek = [$('#numbercdek'+order_id).val()]; var numbercdek[] = $('#numbercdek'+order_id).val(); Подскажите, пожалуйста, что подправить чтобы отправились все товары.Пробовал еще так var numbercdek = document.getElementsByName('numbercdek'); но тоже результата нет. Цитата Ссылка на сообщение Поделиться на другие сайты
Kasha Опубликовано 21 января, 2019 Жалоба Поделиться Опубликовано 21 января, 2019 потому что надо не в скрипте массив вводить а в форме (первый кусок приведенного вами кода, который html, а не js) Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 Содержимое формы сейчас выглядит вот так {foreach $order->purchases as $p} <div> <input name="numbercdek[]" value="{$order->id|escape}" class="ot12" id="numbercdek{$order->id}"> <input style=" display: none;" name="fiocdek[]" value="{$order->name|escape}" class="ot12" id="fiocdek{$order->id}"> <input style=" display: none;" name="phonecdek[]" value="{$order->phone|escape}" class="ot12" id="phonecdek{$order->id}"> <input style=" display: none;" name="pvzcdek[]" value="{$order->cdek_pvz}" class="ot12" id="pvzcdek{$order->id}"> <input style=" display: none;" name="skucdek[]" value="{$p->sku}" class="ot12" id="skucdek{$order->id}"> <input style=" display: none;" name="pricecdek[]" value="{$p->price|string_format:"%.0f"}" class="ot12" id="pricecdek{$order->id}"> <input style=" display: none;" name="pnamcdek[]" value="{$p->product_name}, {$p->variant_name}" class="ot12" id="pnamcdek{$order->id}"> <input style=" display: none;" name="citycdek[]" value="{$order->cdek_city}" class="ot12" id="citycdek{$order->id}"> <input style=" display: none;" name="citycodecdek[]" value="{$order->cdek_city_code}" class="ot12" id="citycodecdek{$order->id}"> </div> {/foreach} Подскажите что в ней надо подправить, как ввести массив? По идее эта форма выводит все что надо (все товары), но отправляется только один. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 21 января, 2019 Жалоба Поделиться Опубликовано 21 января, 2019 Отправлять примерно так: data: $('#osForm').serialize() Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 Отправлять примерно так: data: $('#osForm').serialize() Я так уже пробовал, отправляет только один товар... Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 Отправлять примерно так: data: $('#osForm').serialize() Этот код сработал, спасибо. Отправились все товары. Только он сработал для последнего заказа на странице заказов.Пробую вот так <form method="" name="osForm{$order->id}" id="osForm{$order->id}"> и в скрипте data: $('#osForm'+order_id).serialize() Пока не получается... Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 (изменено) В админке висит два заказа, код вывода формы выше...У второго заказа в html коде выводится <form method="" name="osForm{$order->id}" id="osForm{$order->id}"> а у первого нет. Подскажите почему? Чертовщина какая то.. form на div меняю - появляется, ставлю form в одном заказе есть во втором нет... Изменено 21 января, 2019 пользователем esistema1 Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 Проблема была во вложенной форме. Всем огромное спасибо за помощь!!! Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 Появилась следующая проблема.Теперь массив передается в файл обработчик, там формируется xml примерно следующего содержания <Item WareKey="'.$skucdek.'" Cost="1" Payment="'.$pricecdek.'" Weight="300" Amount="1" Comment="'.$pnamcdek.'"> </Item> Переменная принимается следующей строкой $pnamcdek = $_POST['pnamcdek']; Когда в файл отправлялся один товар, значения переменных заполнялись правильно. Теперь вместо значений надпись "Array". Как подставить данные из массива и сгенерировать правильный xml запрос? Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 21 января, 2019 Жалоба Поделиться Опубликовано 21 января, 2019 https://www.internet-technologies.ru/articles/podrobnoe-rukovodstvo-po-php-massivam.html Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 С инструкцией ознакомился...Я видимо явно что то делаю не так... Написал в файле foreach($skucdek as $skucdek) { foreach($pricecdek as $pricecdek) { foreach($pnamcdek as $pnamcdek) { $xxx = '<Item WareKey="'.$skucdek.'" Cost="1" Payment="'.$pricecdek.'" Weight="300" Amount="1" Comment="'.$pnamcdek.'"> </Item>'; echo $xxx; }}} В итоге он выводит <Item WareKey="8148" Cost="1" Payment="990" Weight="300" Amount="1" Comment="Платье, 46"></Item> <Item WareKey="8148" Cost="1" Payment="990" Weight="300" Amount="1" Comment="Блуза, 46"></Item> Подставляется только последняя переменная pnamcdek. Остальные 2 не меняются. Как сделать чтобы заработало? Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 21 января, 2019 Автор Жалоба Поделиться Опубликовано 21 января, 2019 Немного разобрался с массивами... Единственное место где должно быть несколько товаров это Тег itemСделал его вывод таким foreach($skucdek as $skucde) { $Item = $order->addChild('Item', ' '); $Item->addAttribute('Cost', '1'); $Item->addAttribute('Weight', '300'); $Item->addAttribute('Amount', '1'); foreach($skucdek as $skucde) { $Item->addAttribute('WareKey', $skucde); } foreach($pricecdek as $pricecde) { $Item->addAttribute('Payment', $pricecde); } foreach($pnamcdek as $pnamcde) { $Item->addAttribute('Comment', $pnamcde); } ;} Если в заказе 2 товара, он создает 2 тега как положено но содержимое тегов одинаковое. <Item Cost="1" Weight="300" Amount="1" WareKey="8148" Payment="990" Comment="Платье, 46"> </Item> <Item Cost="1" Weight="300" Amount="1" WareKey="8148" Payment="990" Comment="Платье, 46"> </Item> Помогите пожалуйста разобраться с этим. Цитата Ссылка на сообщение Поделиться на другие сайты
Kasha Опубликовано 21 января, 2019 Жалоба Поделиться Опубликовано 21 января, 2019 С инструкцией ознакомился...Я видимо явно что то делаю не так... Написал в файле foreach($skucdek as $skucdek) { foreach($pricecdek as $pricecdek) { foreach($pnamcdek as $pnamcdek) { $xxx = '<Item WareKey="'.$skucdek.'" Cost="1" Payment="'.$pricecdek.'" Weight="300" Amount="1" Comment="'.$pnamcdek.'"> </Item>'; echo $xxx; }}} Хочется поругаться, но помню как сам начинал...Давайте сначала посмотрим на конструкцию foreach($skucdek as $skucdek)вы говорите "Рассмотрим все элементы массива А в виде элемента А" не находите тут противоречий? Нельзя брать переменной название массива, из этого выйдет нереальная каша.Пойдем дальше $xxx = 'а тут вы обращаетесь к массиву или уже к переменной? Вот именно что этого уже никто не знает, потому что логика нарушена безумно. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 22 января, 2019 Жалоба Поделиться Опубликовано 22 января, 2019 Помогите пожалуйста разобраться с этим. Чтобы Вам помочь, надо либо написать полностью готовый код с полной отладкой, либо научить Вас с нуля хотя бы основам программирования.И то и другое требует серьезных усилий. К таким запросам надо бы с Вашей стороны понимание масштабов задачи и готовность оплачивать немалые труды.А пока что имеем такую картину: Вы взялись за задачу довольно непростую даже для специалистов, и пытаетесь ее решать методом случайного тыка и слепого копирования... Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 22 января, 2019 Автор Жалоба Поделиться Опубликовано 22 января, 2019 Чтобы Вам помочь, надо либо написать полностью готовый код с полной отладкой, либо научить Вас с нуля хотя бы основам программирования.И то и другое требует серьезных усилий. К таким запросам надо бы с Вашей стороны понимание масштабов задачи и готовность оплачивать немалые труды.А пока что имеем такую картину: Вы взялись за задачу довольно непростую даже для специалистов, и пытаетесь ее решать методом случайного тыка и слепого копирования... Понял, в любом случае спасибо за помощь и подсказки. Практически все получилось сделать, еще немного поизучаю и добью этот обмен со СДЭК... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.