За последние 24 часа нас посетили 104395 программистов и 5751 робот. Сейчас ищут 2876 программистов ...

PHP скрипт XML запроса

Тема в разделе "PHP для новичков", создана пользователем Silent_VL, 2 мар 2016.

  1. Silent_VL

    Silent_VL Новичок

    С нами с:
    2 мар 2016
    Сообщения:
    4
    Симпатии:
    0
    Здравствуйте товарищи специалисты!
    Требуется ваша помощь...
    Я сейчас пытаюсь расширять свои знания практическим путём (у меня обычно только так и бывает). Есть у меня одна задачка...
    Есть скрипт xml запроса (не мой, взято от поставщика услуг):

    Код (PHP):
    1. <?php
    2.         
    3. $xml=
    4. '<?xml version="1.0" encoding="UTF-8" ?>
    5. <message>
    6.  
    7. <param>
    8.  
    9. <action>priceBatch</action>
    10. <login>xxx</login>
    11.  
    12. <password>xxx</password>
    13.  
    14. <dayLimit>5</dayLimit>
    15. </param>
    16.  
    17. <items>
    18. <pn>serial_number_1</pn>
    19. <brand>brand_number_1</brand>
    20. </items>
    21.  
    22. <items>
    23. <pn>serial_number_2</pn>
    24. <brand>brand_number_2</brand>
    25. </items>
    26. </message>';
    27.  
    28. $data = array('xml' => $xml);
    29. $address="http://xml.adeo.pro";
    30. $ch = curl_init($address);
    31.  
    32. curl_setopt($ch, CURLOPT_HEADER, 0);
    33.  
    34. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    35. curl_setopt($ch, CURLOPT_POST,1);
    36. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    37. $result=curl_exec($ch);
    38. echo $result;
    39. ?>
    И есть мой скрипт запроса и вывода информации из БД на страничке сайта. Вывод на страничку сделал чисто для того, чтобы визуально оценить результат выполнения скрипта.

    Код (PHP):
    1. <?php
    2. $SELECT_MOTOR_OIL_2 = "SELECT
    3. `shop_catalogue_products`.`id` AS `product_id`,
    4. `shop_catalogue_products`.`caption` AS `name`,
    5. `shop_properties_values_text`.`value` AS `pn`,
    6. `shop_properties_values_text_1`.`value` AS `vendor`
    7. FROM `shop_catalogue_products`
    8.   INNER JOIN `shop_properties_values_text`
    9.   INNER JOIN `shop_properties_values_text` `shop_properties_values_text_1`
    10. WHERE `shop_catalogue_products`.`category_id` = 98
    11. AND `shop_properties_values_text`.`property_id` = 89
    12. AND `shop_catalogue_products`.`id` = `shop_properties_values_text`.`product_id`
    13. AND `shop_properties_values_text_1`.`property_id` = 90
    14. AND `shop_properties_values_text_1`.`product_id` = `shop_catalogue_products`.`id`;";
    15.  
    16. $motor_oil_query = mysqli_query($db_link, $SELECT_MOTOR_OIL_2);
    17.  
    18. while($motor_oil = mysqli_fetch_array($motor_oil_query))
    19. {
    20. ?>
    21.  
    22. <div class="oil_item">
    23. <p>
    24. <?php echo $motor_oil["vendor"]; ?>
    25. <?php echo $motor_oil["pn"]; ?>
    26. </p>
    27. </div>
    28.  
    29. <?php
    30. }
    31. ?>
    Оба этих скрипта работают и выполняют то, что они должны выполнять. Но я пытаюсь модифицировать первый (не мой) скрипт таким образом, чтобы фрагмент:

    <items>
    <pn>serial_number_1</pn>
    <brand>brand_number_1</brand>
    </items>

    формировался скриптом в виде массива. В котором serial_number_Х брался из переменной $motor_oil["pn"], а brand_number_1 из переменной $motor_oil["vendor"].

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

    Прошу направьте меня куда мне думать и смотреть?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    а в чем проблема-то? Вписывай в переменную вместо echo и усё.
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.601
    Симпатии:
    423
    Адрес:
    РД, г. Махачкала.
    Если я все правильно понял, тебе просто надо подставить переменню в текст xml.
    Напрмер:
    Код (PHP):
    1. <brand>{$motor_oil["vendor"]}</brand>
    2.  
    Добавлено спустя 4 минуты 21 секунду:
    если полученный результать все таки выдается браузеру, можно этот код записать так:

    Код (PHP):
    1. curl_setopt($ch, CURLOPT_POST,1);
    2. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    3. curl_exec($ch);
     
  4. Silent_VL

    Silent_VL Новичок

    С нами с:
    2 мар 2016
    Сообщения:
    4
    Симпатии:
    0
    Да, нужно вставить переменную в xml, но это пол беды, ведь нужно её объявить - как она формируется. И вот тут у меня сложности. Я пытаюсь методом проб и ошибок подобрать корректный синтаксис. Как я уже говорил я пока ещё не сильно знаю, какие есть возможности и как правильно писать. Вот к примеру код, который я пытался написать и он не работает:
    Код (PHP):
    1. <?php
    2. $SELECT_MOTOR_OIL_2 = "SELECT
    3. `shop_catalogue_products`.`id` AS `product_id`,
    4. `shop_catalogue_products`.`caption` AS `name`,
    5. `shop_properties_values_text`.`value` AS `pn`,
    6. `shop_properties_values_text_1`.`value` AS `vendor`
    7. FROM `shop_catalogue_products`
    8.   INNER JOIN `shop_properties_values_text`
    9.   INNER JOIN `shop_properties_values_text` `shop_properties_values_text_1`
    10. WHERE `shop_catalogue_products`.`category_id` = 98
    11. AND `shop_properties_values_text`.`property_id` = 89
    12. AND `shop_catalogue_products`.`id` = `shop_properties_values_text`.`product_id`
    13. AND `shop_properties_values_text_1`.`property_id` = 90
    14. AND `shop_properties_values_text_1`.`product_id` = `shop_catalogue_products`.`id`;";
    15. $motor_oil_query = mysqli_query($SELECT_MOTOR_OIL_2);
    16.  
    17. $xml='
    18. <?xml version="1.0" encoding="UTF-8" ?>
    19.     <message>
    20.         <param>
    21.             <action>priceBatch</action>
    22.             <login>xxxx</login>
    23.             <password>xxxx</password>
    24.             <dayLimit>5</dayLimit>
    25.         </param>
    26.  
    27. <?php
    28. while($motor_oil = mysqli_fetch_array($motor_oil_query))
    29. {
    30.     ?>
    31.         <items>    
    32.           <pn><?php echo $motor_oil["pn"]; ?></pn>
    33.           <brand><?php echo $motor_oil["vendor"]; ?></brand>
    34.         </items>
    35. <?php
    36. }
    37. ?>
    38.     </message>';
    39. ?>
    40.  
    41. <?php
    42.        $data = array('xml' => $xml);
    43.        $address="http://xml.adeo.pro";
    44.       $ch = curl_init($address);
    45.         curl_setopt($ch, CURLOPT_HEADER, 0);
    46.         curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    47.         curl_setopt($ch, CURLOPT_POST,1);
    48.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    49.         $result=curl_exec($ch);
    50.         echo $result;
    51. ?>
    Я там, конечно, намудрил и, как я понял, нельзя внутри $xml=' '; писать <?php while...
    В общем сижу и пробую и так и сяк написать. Пока не выходит...

    P.S.
    Да, и кстати, не совсем верно утверждение "подставить переменную в текст xml". Мне нужно, чтобы часть кода xml формировалась в php в виде массива...
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
  6. Silent_VL

    Silent_VL Новичок

    С нами с:
    2 мар 2016
    Сообщения:
    4
    Симпатии:
    0
    Спасибо! Похоже то, что нужно, сейчас буду пробовать. По результату отпишусь!)
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    да всё у тебя получится. Это вообще простейшая задача в переменную текста напихать в цикле. Если че - пиши.
     
  8. Silent_VL

    Silent_VL Новичок

    С нами с:
    2 мар 2016
    Сообщения:
    4
    Симпатии:
    0
    Всё! Всем спасибо!
    Понимаю, что всё это очень просто и базовые принципы языка, всё равно оставлю код для истории. Мало ли может кто-нибудь найдет тут решение своей проблемы.

    В результате мой код стал выглядеть следующим образом:

    Код (PHP):
    1. <?php
    2. $SELECT_MOTOR_OIL_2 = "SELECT
    3. `shop_properties_values_text`.`value` AS `pn`,
    4. `shop_properties_values_text_1`.`value` AS `vendor`
    5. FROM `shop_catalogue_products`
    6.   INNER JOIN `shop_properties_values_text`
    7.   INNER JOIN `shop_properties_values_text` `shop_properties_values_text_1`
    8. WHERE `shop_catalogue_products`.`category_id` = 98
    9. AND `shop_properties_values_text`.`property_id` = 89
    10. AND `shop_catalogue_products`.`id` = `shop_properties_values_text`.`product_id`
    11. AND `shop_properties_values_text_1`.`property_id` = 90
    12. AND `shop_properties_values_text_1`.`product_id` = `shop_catalogue_products`.`id`;";
    13.  
    14. $motor_oil_query = mysqli_query($db_link, $SELECT_MOTOR_OIL_2);
    15.  
    16. $motor_oil = array();
    17. while($row = mysqli_fetch_assoc($motor_oil_query)) {
    18.     $motor_oil[] = $row;
    19. }
    20.  
    21. $xml = '<?xml version="1.0" encoding="UTF-8" ?>
    22.         <message>
    23.             <param>
    24.             <action>priceBatch</action>
    25.             <login>xxxx</login>
    26.             <password>xxxx</password>
    27.             <dayLimit>5</dayLimit>
    28.             </param>';
    29.  
    30. foreach ($motor_oil as $value) {
    31.     $xml .= '<items><pn>'.$value[pn].'</pn><brand>'.$value[vendor].'</brand></items>';
    32. };
    33. $xml .= '</message>';
    34.  
    35. $data = array('xml' => $xml);
    36.        $address="http://xml.adeo.pro";
    37.       $ch = curl_init($address);
    38.         curl_setopt($ch, CURLOPT_HEADER, 0);
    39.         curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    40.         curl_setopt($ch, CURLOPT_POST,1);
    41.         curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    42.         $result=curl_exec($ch);
    43.         echo $result;
    44.  
    45. ?>
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.333
    Симпатии:
    1.753
    Круто поздравляю

    Код (PHP):
    1. $value[pn].'</pn><brand>'.$value[vendor] 
    надо писать в кавычках
    Код (PHP):
    1. $value['pn'].'</pn><brand>'.$value['vendor']