За последние 24 часа нас посетили 17525 программистов и 1724 робота. Сейчас ищет 1581 программист ...

xml и php

Тема в разделе "PHP и базы данных", создана пользователем exstyles, 14 июн 2022.

  1. exstyles

    exstyles Новичок

    С нами с:
    20 мар 2020
    Сообщения:
    13
    Симпатии:
    1
    Здравствуйте. Подскажите, пожалуйста, как прочитать все <param> в xml? В базу залетает только первое значение, а остальных как и нет...

    Код (Text):
    1. <offer id="246150" type="vendor.model" available="true">
    2.  
    3.   <price>8.44</price>
    4.  
    5.   <categoryId>2444</categoryId>
    6.   <picture>/upload/iblock/4d8/ral_5015.jpg</picture>
    7.  
    8.   <model>Заглушка конька круглого простая NormanMP (ПЭ-01-5015-0.5)</model>
    9.   <manufacturer_warranty>true</manufacturer_warranty>
    10.   <param name="Толщина" unit="мм">0.5</param>
    11.   <param name="Тип покрытия">Полиэстер</param>
    12.   <param name="Вид поверхности">Глянцевые</param>
    13.   <param name="Ширина" unit="м">0.12</param>
    14.   <param name="Цветостойкость">Хорошая</param>
    15.   <param name="Коррозийная стойкость">Удовлетворительная</param>
    16.   <param name="Устойчивость к мех. повреждениям">Удовлетворительная</param>
    17.   <param name="Ширина листа, м">0.12</param>
    18.   <param name="Область применения">Конёк</param>
    19.   <param name="Единица измерения">5</param>
    20. </offer>

    PHP:
    1. if(isset($_POST['importSubmit2'])){
    2.  
    3.     $data = simplexml_load_file(__DIR__ . '/file.xml');
    4.    
    5.     $shop_name = strval($data->shop->name);
    6.    
    7.     $db->query("DELETE FROM `oc_product` WHERE `shop` = '".$shop_name."'");
    8.     $db->query("DELETE FROM `oc_product_description` WHERE `shop` = '".$shop_name."'");
    9.     $db->query("DELETE FROM `oc_product_to_category` WHERE `shop` = '".$shop_name."'");
    10.     $db->query("DELETE FROM `oc_product_to_layout` WHERE `shop` = '".$shop_name."'");
    11.     $db->query("DELETE FROM `oc_product_to_store` WHERE `shop` = '".$shop_name."'");
    12.  
    13.   foreach ($data->shop->offers->offer as $row) {
    14.    
    15.     $product_id = intval($row['id']);  
    16.    
    17.     $price = strval($row->price);  
    18.    
    19.     $categoryId = intval($row->categoryId);
    20.    
    21.     if(isset($row->model)){
    22.        $name = strval($row->model);      
    23.     }else{
    24.        $name = strval($row->name);
    25.     }
    26.  
    27.     if(isset($row->article)){
    28.        $article = strval($row->article);
    29.     }
    30.  
    31.     $picture = strval($row->picture);
    32.     $description = strval($row->description);
    33.  
    34.     if(isset($row->okdp)){
    35.        $odkp = strval($row->okdp);
    36.     }else{
    37.        $odkp = '';
    38.     }
    39.    
    40.     if(isset($row->param)){
    41.         $param = $row->param;
    42.     }
    43.        
    44.    $db->query("INSERT INTO `oc_product` (`product_id`,`model`,`date_available`,`sku`,`upc`,`ean`,`jan`,`isbn`,`mpn`,`location`,`stock_status_id`,`image`, `weight_class_id`,    `manufacturer_id`, `tax_class_id`,`date_added`,`date_modified`,`status`,`quantity`, `price`, `shop`) VALUES ('".$product_id."','".$odkp."',STR_TO_DATE('2020-05-28 12:00', '%Y-%m-%d %H:%i'),'".$article."','', '','','','','0','0','".$picture."', '1', '0','1000',NOW(),NOW(),'1','1000','".$price."', '".$shop_name."')");
    45.    $db->query("INSERT INTO `oc_product_description` (`product_id`, `language_id`, `name`, `description`, `tag`, `meta_title`, `meta_description`, `meta_keyword`, `shop`) VALUES ('".$product_id."','1','".$name."','".$description."','','".$name."','','','".$shop_name."')");
    46.    $db->query("INSERT INTO `oc_product_to_store` (`product_id`, `store_id`, `shop`) VALUES ('".$product_id."','0','".$shop_name."')");
    47.    $db->query("INSERT INTO `oc_product_to_category` (`product_id`, `category_id`, `shop`) VALUES ('".$product_id."','".$categoryId."','".$shop_name."')");
    48.    $db->query("INSERT INTO `oc_product_to_layout` (`product_id`, `store_id`, `layout_id`, `shop`) VALUES ('".$product_id."','0','0','".$shop_name."')");
    49.  
    50.  
    51.    $oc_attribute_description = $db->query("SELECT `attribute_id`, `language_id`, `name` FROM `oc_attribute_description` WHERE `name` = '".$param['name']."'");
    52.    while($rows = $oc_attribute_description->fetch_assoc()){
    53.  
    54.    $db->query("INSERT INTO `oc_product_attribute` (`product_id`, `attribute_id`, `language_id`, `text`) VALUES ('".$product_id."','".$rows['attribute_id']."','1','".$param."')");  
    55.    }
    56.     }
    57.  
    58.    }
     
  2. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    PHP:
    1. <?php
    2. // Файл test.xml содержит XML-документ с корневым элементом
    3. // и по меньшей мере элемент /[root]/title.
    4.  
    5. if (file_exists('test.xml')) {
    6.     $xml = simplexml_load_file('test.xml');
    7.  
    8.     print_r($xml);
    9. } else {
    10.     exit('Не удалось открыть файл test.xml.');
    11. }
    12. ?>
     
  3. exstyles

    exstyles Новичок

    С нами с:
    20 мар 2020
    Сообщения:
    13
    Симпатии:
    1
    Это все читается и работает. Проблема в том, что имеется 10 <param> с разными именами и значениями. Вот эти <param name =''> я пытаюсь сопоставить с такими же name в бд в таблице скажем 1 и если такой атрибут есть то нужно внести в таблицу 2. что-то типо того, но это нифига не то.
    PHP:
    1.  $oc_attribute_description = $db->query("SELECT `attribute_id`, `language_id`, `name` FROM `oc_attribute_description` WHERE `name` = '".$param['name']."'");
    2.    while($rows = $oc_attribute_description->fetch_assoc()){
    3.    $db->query("INSERT INTO `oc_product_attribute` (`product_id`, `attribute_id`, `language_id`, `text`) VALUES ('".$product_id."','".$rows['attribute_id']."','1','".$param."')");
    4.    }
     
  4. antoniii

    antoniii Активный пользователь

    С нами с:
    16 мар 2022
    Сообщения:
    419
    Симпатии:
    71
    что дает print_r()? Какова структура массива?
     
  5. exstyles

    exstyles Новичок

    С нами с:
    20 мар 2020
    Сообщения:
    13
    Симпатии:
    1
    Уже не важно=) Сам решил данный вопрос. Спасибо!