Здравствуйте товарищи специалисты! Требуется ваша помощь... Я сейчас пытаюсь расширять свои знания практическим путём (у меня обычно только так и бывает). Есть у меня одна задачка... Есть скрипт xml запроса (не мой, взято от поставщика услуг): Код (PHP): <?php $xml= '<?xml version="1.0" encoding="UTF-8" ?> <message> <param> <action>priceBatch</action> <login>xxx</login> <password>xxx</password> <dayLimit>5</dayLimit> </param> <items> <pn>serial_number_1</pn> <brand>brand_number_1</brand> </items> <items> <pn>serial_number_2</pn> <brand>brand_number_2</brand> </items> </message>'; $data = array('xml' => $xml); $address="http://xml.adeo.pro"; $ch = curl_init($address); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result=curl_exec($ch); echo $result; ?> И есть мой скрипт запроса и вывода информации из БД на страничке сайта. Вывод на страничку сделал чисто для того, чтобы визуально оценить результат выполнения скрипта. Код (PHP): <?php $SELECT_MOTOR_OIL_2 = "SELECT `shop_catalogue_products`.`id` AS `product_id`, `shop_catalogue_products`.`caption` AS `name`, `shop_properties_values_text`.`value` AS `pn`, `shop_properties_values_text_1`.`value` AS `vendor` FROM `shop_catalogue_products` INNER JOIN `shop_properties_values_text` INNER JOIN `shop_properties_values_text` `shop_properties_values_text_1` WHERE `shop_catalogue_products`.`category_id` = 98 AND `shop_properties_values_text`.`property_id` = 89 AND `shop_catalogue_products`.`id` = `shop_properties_values_text`.`product_id` AND `shop_properties_values_text_1`.`property_id` = 90 AND `shop_properties_values_text_1`.`product_id` = `shop_catalogue_products`.`id`;"; $motor_oil_query = mysqli_query($db_link, $SELECT_MOTOR_OIL_2); while($motor_oil = mysqli_fetch_array($motor_oil_query)) { ?> <div class="oil_item"> <p> <?php echo $motor_oil["vendor"]; ?> <?php echo $motor_oil["pn"]; ?> </p> </div> <?php } ?> Оба этих скрипта работают и выполняют то, что они должны выполнять. Но я пытаюсь модифицировать первый (не мой) скрипт таким образом, чтобы фрагмент: <items> <pn>serial_number_1</pn> <brand>brand_number_1</brand> </items> формировался скриптом в виде массива. В котором serial_number_Х брался из переменной $motor_oil["pn"], а brand_number_1 из переменной $motor_oil["vendor"]. Заранее прошу прощения за возможно не корректные формулировки ибо самоучка и самоучусь пока только в течении 2-ух недель параллельно с основной работой. А задачу выполнять надо. А так же я осознаю, что у меня большие проблемы с синтаксисом, где-то на интуитивном уровне я осознаю, что нужно сделать, но знаний о том как это пишется у меня нет, экспериментирую, но пока ничего не могу сделать. Прошу направьте меня куда мне думать и смотреть?
Если я все правильно понял, тебе просто надо подставить переменню в текст xml. Напрмер: Код (PHP): <brand>{$motor_oil["vendor"]}</brand> Добавлено спустя 4 минуты 21 секунду: если полученный результать все таки выдается браузеру, можно этот код записать так: Код (PHP): curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch);
Да, нужно вставить переменную в xml, но это пол беды, ведь нужно её объявить - как она формируется. И вот тут у меня сложности. Я пытаюсь методом проб и ошибок подобрать корректный синтаксис. Как я уже говорил я пока ещё не сильно знаю, какие есть возможности и как правильно писать. Вот к примеру код, который я пытался написать и он не работает: Код (PHP): <?php $SELECT_MOTOR_OIL_2 = "SELECT `shop_catalogue_products`.`id` AS `product_id`, `shop_catalogue_products`.`caption` AS `name`, `shop_properties_values_text`.`value` AS `pn`, `shop_properties_values_text_1`.`value` AS `vendor` FROM `shop_catalogue_products` INNER JOIN `shop_properties_values_text` INNER JOIN `shop_properties_values_text` `shop_properties_values_text_1` WHERE `shop_catalogue_products`.`category_id` = 98 AND `shop_properties_values_text`.`property_id` = 89 AND `shop_catalogue_products`.`id` = `shop_properties_values_text`.`product_id` AND `shop_properties_values_text_1`.`property_id` = 90 AND `shop_properties_values_text_1`.`product_id` = `shop_catalogue_products`.`id`;"; $motor_oil_query = mysqli_query($SELECT_MOTOR_OIL_2); $xml=' <?xml version="1.0" encoding="UTF-8" ?> <message> <param> <action>priceBatch</action> <login>xxxx</login> <password>xxxx</password> <dayLimit>5</dayLimit> </param> <?php while($motor_oil = mysqli_fetch_array($motor_oil_query)) { ?> <items> <pn><?php echo $motor_oil["pn"]; ?></pn> <brand><?php echo $motor_oil["vendor"]; ?></brand> </items> <?php } ?> </message>'; ?> <?php $data = array('xml' => $xml); $address="http://xml.adeo.pro"; $ch = curl_init($address); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result=curl_exec($ch); echo $result; ?> Я там, конечно, намудрил и, как я понял, нельзя внутри $xml=' '; писать <?php while... В общем сижу и пробую и так и сяк написать. Пока не выходит... P.S. Да, и кстати, не совсем верно утверждение "подставить переменную в текст xml". Мне нужно, чтобы часть кода xml формировалась в php в виде массива...
https://php.net/manual/ru/language.operators.string.php https://php.net/manual/ru/language.types.string.php Код (PHP): <?php $arr = [['one', 'two'], ['one', 'two'], ['one', 'two'], ]; $xml = '<?xml>'; foreach ($arr as $value) { $xml .= '<x>'.$value[0].'</x><y>'.$value[1].'</y>'; } $xml .= '</xml>'; echo $xml;
да всё у тебя получится. Это вообще простейшая задача в переменную текста напихать в цикле. Если че - пиши.
Всё! Всем спасибо! Понимаю, что всё это очень просто и базовые принципы языка, всё равно оставлю код для истории. Мало ли может кто-нибудь найдет тут решение своей проблемы. В результате мой код стал выглядеть следующим образом: Код (PHP): <?php $SELECT_MOTOR_OIL_2 = "SELECT `shop_properties_values_text`.`value` AS `pn`, `shop_properties_values_text_1`.`value` AS `vendor` FROM `shop_catalogue_products` INNER JOIN `shop_properties_values_text` INNER JOIN `shop_properties_values_text` `shop_properties_values_text_1` WHERE `shop_catalogue_products`.`category_id` = 98 AND `shop_properties_values_text`.`property_id` = 89 AND `shop_catalogue_products`.`id` = `shop_properties_values_text`.`product_id` AND `shop_properties_values_text_1`.`property_id` = 90 AND `shop_properties_values_text_1`.`product_id` = `shop_catalogue_products`.`id`;"; $motor_oil_query = mysqli_query($db_link, $SELECT_MOTOR_OIL_2); $motor_oil = array(); while($row = mysqli_fetch_assoc($motor_oil_query)) { $motor_oil[] = $row; } $xml = '<?xml version="1.0" encoding="UTF-8" ?> <message> <param> <action>priceBatch</action> <login>xxxx</login> <password>xxxx</password> <dayLimit>5</dayLimit> </param>'; foreach ($motor_oil as $value) { $xml .= '<items><pn>'.$value[pn].'</pn><brand>'.$value[vendor].'</brand></items>'; }; $xml .= '</message>'; $data = array('xml' => $xml); $address="http://xml.adeo.pro"; $ch = curl_init($address); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result=curl_exec($ch); echo $result; ?>
Круто поздравляю Код (PHP): $value[pn].'</pn><brand>'.$value[vendor] надо писать в кавычках Код (PHP): $value['pn'].'</pn><brand>'.$value['vendor']