Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: обработка XML и запись в БД
 
 автор: Dizels   (15.03.2010 в 10:44)   письмо автору
 
 

Вот часть xml файла:
<item tov_id="719510">
  <tov_id rus="Артикул">719510</tov_id> 
  <tov_name rus="Наименование">Брелок-ручка шариковая серебристый</tov_name> 
- <tov_rubr>
  <rubr>Пенотека\Original\</rubr> 
  </tov_rubr>
  <tov_color rus="Цвет">серебристый</tov_color> 
  <tov_upak_vid rus="Вид упаковки" /> 
  <tov_vesed rus="Вес единицы (кг)">0</tov_vesed> 
  <tov_upak_kol rus="Количество в упаковке">0</tov_upak_kol> 
  <tov_upak_razm rus="Размер упаковки" /> 
  <tov_vid_nanes rus="Вид нанесения">лазерная гравировка</tov_vid_nanes> 
  <tov_opis rus="Описание">Металлическая ручка-брелок на карабине очень удобна и всегда под рукой.</tov_opis> 
  <tov_price rus="Цена">34</tov_price> 
- <tov_pic>
- <preview>
  <pic>719510_a.jpg</pic> 
  </preview>
- <small>
  <pic>719510_a.jpg</pic> 
  </small>
- <big>
  <pic>719510_a.jpg</pic> 
  </big>
  </tov_pic>
  <tov_kol rus="Остаток на складе">0</tov_kol> 
  <tov_rez rus="Резерв">0</tov_rez> 
  <tov_str rus="Страница каталога">53</tov_str> 
  <tov_cat_skid rus="Каталог скидки">PENOTEKA 2008 (Азия)</tov_cat_skid> 
  <tov_razm rus="Размер товара" /> 
  <tov_brand rus="Брэнд" /> 
  <tov_mat rus="Материал товара">металл</tov_mat> 
  </item>

Собственно - нужно все эти данные перенести в таблицу. Как это реализовать?
Данные из файла беру так:
<?php
$filename 
'penoteka.xml';   
$xml simplexml_load_file($filename);     
foreach (
$xml->item as $item) {
    
$tov_id $item->tov_id;
    
$tov_name $item->tov_name;
    
$tov_rubr $item->tov_rubr;
    
$tov_color $item->tov_color;
    
$tov_upak_vid $item->tov_upak_vid;
    
$tov_vesed $item->tov_vesed;
    
$tov_upak_kol $item->tov_upak_kol;
    
$tov_upak_razm $item->tov_upak_razm;
    
$tov_vid_nanes $item->tov_vid_nanes;
    
$tov_opis $item->tov_opis;
    
$tov_price $item->tov_price;
    
$tov_pic $item->tov_pic;
    
$tov_kol $item->tov_kol;
    
$tov_rez $item->tov_rez;
    
$tov_str $item->tov_str;        
    
$tov_cat_skid $item->tov_cat_skid;        
    
$tov_razm $item->tov_razm;        
    
$tov_brand $item->tov_brand;        
    
$tov_mat $item->tov_mat;
    
    echo 
"
        <tr>
            <td>"
,iconv("UTF-8""windows-1251"$tov_id),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_name),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_rubr),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_color),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_upak_vid),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_vesed),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_upak_kol),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_upak_razm),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_vid_nanes),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_opis),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_price),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_pic),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_kol),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_rez),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_str),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_cat_skid),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_razm),"</td>
            <td>"
,iconv("UTF-8""windows-1251"$tov_brand),"</td>            
            <td>"
,iconv("UTF-8""windows-1251"$tov_mat),"</td>
        </tr>"
;
}    
?>

Но вот как все это потом записывать в БД - не пойму. Подскажите пожалуйста (примером с кодом).
Заранее большое спасибо.

  Ответить  
 
 автор: sim5   (15.03.2010 в 14:03)   письмо автору
 
   для: Dizels   (15.03.2010 в 10:44)
 

А сформировать таблицу при выводе на страницу нельзя разве, зачем ее в базу тулить?
Существует многострочная запись для оператора INSERT, почитайте, сразу поймете как вставить записи в базу.

  Ответить  
 
 автор: Dizels   (16.03.2010 в 10:58)   письмо автору
 
   для: sim5   (15.03.2010 в 14:03)
 

>А сформировать таблицу при выводе на страницу нельзя разве, зачем ее в базу тулить?
Нужно именно в базу.

Итак, в базу вставил, но появились проблемы при получении данных из xml, подскажите, как исправить.
<tov_pic>
- <preview>
  <pic>719510_a.jpg</pic> 
  </preview>
- <small>
  <pic>719510_a.jpg</pic> 
  </small>
- <big>
  <pic>719510_a.jpg</pic> 
  </big>
  </tov_pic> 

Как вытащить адреса картинок?
А то у меня пустое поле передает, оно впринципе и правильно, так как адреса записаны как вложенные элементы, но вот как их прочитать - не пойму, подскажите пожалуйста.
Как считываю данные показано в первом сообщении данной темы.

  Ответить  
 
 автор: Dizels   (16.03.2010 в 11:01)   письмо автору
 
   для: sim5   (15.03.2010 в 14:03)
 

Поробовал вытаскивать вот так:
$tov_pic_preview = $item->tov_pic->preview;

но чего-то не выходит :(

  Ответить  
 
 автор: Лена   (16.03.2010 в 11:35)   письмо автору
 
   для: Dizels   (16.03.2010 в 11:01)
 

Когда парсите, сразу делайте вложенные циклы, чтобы вытянуть вложенные элементы.
Код из вашего первого поста:

<?php
foreach ($xml->item as $item) {
//здесь парсите данные...
    
$tov_pic $item->tov_pic;
    foreach ( 
$tov_pic as $pic) {
    
//здесь вытягиваете вложенные элементы
$pic_preview $pic->preview
    }
}
?>

  Ответить  
 
 автор: Dizels   (16.03.2010 в 13:40)   письмо автору
 
   для: Лена   (16.03.2010 в 11:35)
 

Вроде бы вставил, но почему-то не записывает в БД значения, посмотрите, плз в чем ошибка:
<?php
// Соединяемся с базой данных
require_once("config.php");

// Указываем xml-файл
$filename '1.xml';  

// Парсим файл 
$xml simplexml_load_file($filename);     
foreach (
$xml->item as $item
{
    
$tov_pic $item->tov_pic;
    foreach ( 
$tov_pic as $pic)
    {
        
//здесь вытягиваете вложенные элементы
        
$pic_preview $pic->preview
    } 
// Преобразуем кодировку
$tov_pic iconv("UTF-8""windows-1251"$tov_pic);
$pic_preview iconv("UTF-8""windows-1251"$pic_preview);
$y "INSERT INTO pen VALUES (NULL,
                                '
$pic_preview'');";
if(
mysql_query($y))
    {
        echo 
"Данные добавлены в БД<br>";
    }
}

  Ответить  
 
 автор: Dizels   (16.03.2010 в 14:52)   письмо автору
 
   для: Dizels   (16.03.2010 в 13:40)
 

Все еще нуждаюсь в Вашей помощи.

  Ответить  
 
 автор: Лена   (16.03.2010 в 16:14)   письмо автору
 
   для: Dizels   (16.03.2010 в 13:40)
 

Я вам показала сам принцип, надо было дальше дописать.
У вас внутрь<preview> еще вложен элемент <pic>.
И ошибка у вас -надо вставлять в базу прямо внутри цикла foreach.
Еще одна ошибка - то, что увидела - в этой строке: $y = "INSERT INTO pen VALUES (NULL,
'$pic_preview'');"; Я про конец строки.
Значит,

<?php
foreach ($xml->item as $item){
    
$tov_pic $item->tov_pic;
    foreach (
$tov_pic as $pic){
        
//здесь вытягиваете вложенные элементы
        
foreach ($pic as $value){
            
$ppp $value->pic;
        
// Преобразуем кодировку
        
$tov_pic iconv("UTF-8""windows-1251"$tov_pic);
        
$ppp iconv("UTF-8""windows-1251"$ppp);
        
$y "INSERT INTO pen VALUES (NULL,'$ppp');";
        if(
mysql_query($y)){
               echo 
"Данные добавлены в БД<br>";
               }
        }
    } 
}
?>

Делала быстро, надо тестировать. Если так не получится, надо делать var_dump() на каждом шаге.
Наверное, Вам нужно было бы это не через simplexml_load_file делать... xml-файл можно парсить и по-другому...

  Ответить  
 
 автор: Dizels   (16.03.2010 в 16:36)   письмо автору
 
   для: Лена   (16.03.2010 в 16:14)
 

>И ошибка у вас -надо вставлять в базу прямо внутри цикла foreach.
Объясните, пожалуйста почему - попробовал вне цикла - вроде правильно работает.

Остальной код работает на УРА! Большое спасибо.

  Ответить  
 
 автор: Dizels   (16.03.2010 в 17:10)   письмо автору
 
   для: Dizels   (16.03.2010 в 16:36)
 

И последняя не решенная проблема:
пытаюсь записать в БД в рубрику значение Бренд\Original\ - т.е. именно со знаками \
Перед записью выводил данные - все передается, но в таблицу не записывается почему-то.
Чувствую, что это как раз из-за слешей - вопрос такой как все же это записать или же как записать только ту часть которая между слешами, т.е. в данном случае слово Original

  Ответить  
 
 автор: Dizels   (17.03.2010 в 11:14)   письмо автору
 
   для: Dizels   (16.03.2010 в 17:10)
 

Проблемка все еще не решена :(

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования