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

Форум PHP

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

 

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

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

тема: Преобразование xml в табличный вид.
 
 автор: fxsektor   (27.05.2007 в 22:45)   письмо автору
 
 

Здравствуйте!
Помогите, пожалуйста, преобразовать xml в табличный вид средствами PHP.

<?xml version="1.0" encoding="windows-1251"?>
<clients>
                    <client>
        <field name="Название">Квартон</field>
        <field name="Описание">описание</field>
        <field name="E-mail">email</field>
        <field name="Номер телефона">номер телефона</field>
        <field name="Тип клиента">Юр.лицо</field>
        <field name="Наименование клиента">Квартон ООО</field>
        <field name="Юр.адрес">Чебоксары, пр. М.Горького</field>
        <field name="Физ.адрес">Физический адрес</field>
        <field name="ИНН">2129056701</field>
        <field name="КПП">212901001</field>
        <field name="Расчетный счет">30101810600000000723</field>
        <field name="Банк">банк</field>
        <field name="Корр. счет">40702810800000002840</field>
        <field name="БИК">049706723</field>
        <field name="ОКОНХ">01</field>
        <field name="ОКПО">02</field>
        <field name="Дата рождения">01012000</field>
        <field name="Удостоверение">Паспорт</field>
        <field name="Серия">97 97</field>
        <field name="Номер">456789</field>
        <field name="Место выдачи">место</field>
        <field name="Дата выдачи">02022002</field>
        <field name="Пол">Муж</field>
        <field name="Подставлять телефон в бланке">1</field>
        <field name="Агент">1</field>
    </client>
                     <client>
        <field name="Название">Гаврилов ЧП</field>
        <field name="Наименование клиента">Гаврилов ЧП</field>
    </client>
    <client>
        <field name="Название">ЧРОО Ассоциация инвалидов Поволжья</field>
        <field name="Номер телефона">25-78-61</field>
        <field name="Наименование клиента">ЧРОО Ассоциация инвалидов Поволжья</field>
        <field name="Юр.адрес">428037, г. Чебоксары</field>
        <field name="ИНН">2128025500</field>
    </client>
</clients>

Т.е. должна получится html Таблица со стролбцами Название, Описание, е-мали... - полный списко полей только у "Квартон", - т.е некоторые записи в таблице должы быть пустыми.

   
 
 автор: Саня   (28.05.2007 в 00:38)   письмо автору
 
   для: fxsektor   (27.05.2007 в 22:45)
 

<?php
$xml 
'<?xml version="1.0" encoding="windows-1251"?>
<clients>
    <client>
        <field name="Название">Квартон</field>
        <field name="Описание">описание</field>
        <field name="E-mail">email</field>
        <field name="Номер телефона">номер телефона</field>
        <field name="Тип клиента">Юр.лицо</field>
        <field name="Наименование клиента">Квартон ООО</field>
        <field name="Юр.адрес">Чебоксары, пр. М.Горького</field>
        <field name="Физ.адрес">Физический адрес</field>
        <field name="ИНН">2129056701</field>
        <field name="КПП">212901001</field>
        <field name="Расчетный счет">30101810600000000723</field>
        <field name="Банк">банк</field>
        <field name="Корр. счет">40702810800000002840</field>
        <field name="БИК">049706723</field>
        <field name="ОКОНХ">01</field>
        <field name="ОКПО">02</field>
        <field name="Дата рождения">01012000</field>
        <field name="Удостоверение">Паспорт</field>
        <field name="Серия">97 97</field>
        <field name="Номер">456789</field>
        <field name="Место выдачи">место</field>
        <field name="Дата выдачи">02022002</field>
        <field name="Пол">Муж</field>
        <field name="Подставлять телефон в бланке">1</field>
        <field name="Агент">1</field>
    </client>
                     <client>
        <field name="Название">Гаврилов ЧП</field>
        <field name="Наименование клиента">Гаврилов ЧП</field>
    </client>
    <client>
        <field name="Название">ЧРОО Ассоциация инвалидов Поволжья</field>
        <field name="Номер телефона">25-78-61</field>
        <field name="Наименование клиента">ЧРОО Ассоциация инвалидов Поволжья</field>
        <field name="Юр.адрес">428037, г. Чебоксары</field>
        <field name="ИНН">2128025500</field>
    </client>
</clients>'
;

$dom DOMDocument::loadXML($xml);
$client $dom->getElementsByTagName("client");

print 
'<table border="1"><tr><td>Название</td><td>Описание</td><td>email</td><td>
номер телефона</td><td>Тип клиента</td><td>Наименование клиента</td><td>
Юр. адрес</td><td>Физ. адрес</td><td>ИНН</td><td>КПП</td><td>
Расчётный счёт</td><td>Банк</td><td>Корр. счёт</td><td>БИК</td><td>
ОКОНХ</td><td>ОКПО</td><td>Дата рождения</td><td>Удостоверение</td><td>
Серия</td><td>Номер</td><td>Место выдачи</td><td>Дата выдачи</td><td>
Пол</td><td>Подставлять телефон в банке</td><td>Агент</td></tr>'
;

$array = array("Название" => """Описание" => """E-mail" => """Номер телефона" => "",
               
"Тип клиента" => """Наименование клиента" => """Юр.адрес" => "",
               
"Физ.адрес" => """ИНН" => """КПП" => """Расчетный счет" => """Банк" => "",
               
"Корр. счет" => """БИК" => """ОКОНХ" => """ОКПО" => """Дата рождения" => "",
               
"Удостоверение" => """Серия" => """Номер" => """Место выдачи" => "",
               
"Дата выдачи" => """Пол" => """Подставлять телефон в бланке" => "",
               
"Агент" => "");

for ( 
$i 0$i $client->length$i++ ) {

  print 
"<tr>";

  
$field $client->item($i)->getElementsByTagName("field");
  
$array2 $array;

  for ( 
$j 0$j $field->length$j++ ) {
    
$name iconv("UTF-8""WINDOWS-1251"$field->item($j)->getAttribute("name"));
    
$array2[$name] = iconv("UTF-8""WINDOWS-1251"$field->item($j)->nodeValue);
  }

  foreach( 
$array2 as $val ) {
    if ( !empty(
$val) ) {
      print 
"<td>".$val."</td>";
    } else {
      print 
"<td>&nbsp;</td>";
    }
  }

  print 
"</tr>";
}
print 
"</table>";

   
 
 автор: fxsektor   (28.05.2007 в 08:57)   письмо автору
 
   для: Саня   (28.05.2007 в 00:38)
 


  $field = $client->item($i)->getElementsByTagName("field");

Здесь говорит, что ошибка:
Parse error: parse error, unexpected T_OBJECT_OPERATOR in xml.php on line 67

   
 
 автор: coloboc66   (28.05.2007 в 09:13)   письмо автору
 
   для: fxsektor   (28.05.2007 в 08:57)
 

По-моему, вы забыли друг у друга уточнить версии РНР.

   
 
 автор: fxsektor   (28.05.2007 в 09:47)   письмо автору
 
   для: Саня   (28.05.2007 в 00:38)
 

PHP Version 4.3.9

domxml:
DOM/XML enabled
DOM/XML API Version 20020815
libxml Version 20623
HTML Support enabled
XPath Support enabled
XPointer Support enabled
DOM/XSLT enabled
libxslt Version 1.1.15
libxslt compiled against libxml Version 2.6.23
DOM/EXSLT enabled
libexslt Version 1.1.15

   
 
 автор: coloboc66   (28.05.2007 в 09:58)   письмо автору
 
   для: fxsektor   (28.05.2007 в 09:47)
 

Остаось узнать у Сани, для какой версии его код. По-моему, для 5-ой...

   
 
 автор: fxsektor   (28.05.2007 в 10:08)   письмо автору
 
   для: coloboc66   (28.05.2007 в 09:58)
 

остается ждать, когда он пост прочтет пост. Емайла у него на форуме нет.

   
 
 автор: Саня   (28.05.2007 в 14:49)   письмо автору
 
   для: fxsektor   (27.05.2007 в 22:45)
 

Предыдуший листинг был для PHP 5.
Вот код для PHP 4:
<?
$xml 
'<?xml version="1.0" encoding="windows-1251"?>
<clients>
    <client>
        <field name="Название">Квартон</field>
        <field name="Описание">описание</field>
        <field name="E-mail">email</field>
        <field name="Номер телефона">номер телефона</field>
        <field name="Тип клиента">Юр.лицо</field>
        <field name="Наименование клиента">Квартон ООО</field>
        <field name="Юр.адрес">Чебоксары, пр. М.Горького</field>
        <field name="Физ.адрес">Физический адрес</field>
        <field name="ИНН">2129056701</field>
        <field name="КПП">212901001</field>
        <field name="Расчетный счет">30101810600000000723</field>
        <field name="Банк">банк</field>
        <field name="Корр. счет">40702810800000002840</field>
        <field name="БИК">049706723</field>
        <field name="ОКОНХ">01</field>
        <field name="ОКПО">02</field>
        <field name="Дата рождения">01012000</field>
        <field name="Удостоверение">Паспорт</field>
        <field name="Серия">97 97</field>
        <field name="Номер">456789</field>
        <field name="Место выдачи">место</field>
        <field name="Дата выдачи">02022002</field>
        <field name="Пол">Муж</field>
        <field name="Подставлять телефон в бланке">1</field>
        <field name="Агент">1</field>
    </client>
    <client>
        <field name="Название">Гаврилов ЧП</field>
        <field name="Наименование клиента">Гаврилов ЧП</field>
    </client>
    <client>
        <field name="Название">ЧРОО Ассоциация инвалидов Поволжья</field>
        <field name="Номер телефона">25-78-61</field>
        <field name="Наименование клиента">ЧРОО Ассоциация инвалидов Поволжья</field>
        <field name="Юр.адрес">428037, г. Чебоксары</field>
        <field name="ИНН">2128025500</field>
    </client>
</clients>'
;

print 
'<table border="1"><tr><td>Название</td><td>Описание</td><td>email</td><td>
номер телефона</td><td>Тип клиента</td><td>Наименование клиента</td><td>
Юр. адрес</td><td>Физ. адрес</td><td>ИНН</td><td>КПП</td><td>
Расчётный счёт</td><td>Банк</td><td>Корр. счёт</td><td>БИК</td><td>
ОКОНХ</td><td>ОКПО</td><td>Дата рождения</td><td>Удостоверение</td><td>
Серия</td><td>Номер</td><td>Место выдачи</td><td>Дата выдачи</td><td>
Пол</td><td>Подставлять телефон в банке</td><td>Агент</td></tr>'
;

$array = array("Название" => """Описание" => """E-mail" => """Номер телефона" => "",
               
"Тип клиента" => """Наименование клиента" => """Юр.адрес" => "",
               
"Физ.адрес" => """ИНН" => """КПП" => """Расчетный счет" => """Банк" => "",
               
"Корр. счет" => """БИК" => """ОКОНХ" => """ОКПО" => """Дата рождения" => "",
               
"Удостоверение" => """Серия" => """Номер" => """Место выдачи" => "",
               
"Дата выдачи" => """Пол" => """Подставлять телефон в бланке" => "",
               
"Агент" => "");

$prs xml_parser_create();
xml_parser_set_option($prsXML_OPTION_SKIP_WHITEtrue);
xml_parser_set_option($prsXML_OPTION_CASE_FOLDINGfalse);

xml_parse_into_struct($prs$xml$values$index);

for ( 
$i 0$j 0$i count($index['client']); $i += 2$j++ ) {
  
$indx $index['client'][$i];
  
$array2[$j] = $array;
  while( 
$values[++$indx]['type'] !== "close" ) {
    
$name iconv("UTF-8""WINDOWS-1251"$values[$indx]['attributes']['name']);
    
$val iconv("UTF-8""WINDOWS-1251"$values[$indx]['value']);
    
$array2[$j][$name] = $val;
  }
}

for ( 
$i 0$i count($array2); $i++ ) {
  print 
"<tr>";
  foreach( 
$array2[$i] as $val ) {
    if ( !empty(
$val) ) {
      print 
"<td>".$val."</td>";
    } else {
      print 
"<td>&nbsp;</td>";
    }
  }
  print 
"</tr>";
}

   
 
 автор: fxsektor   (28.05.2007 в 17:15)   письмо автору
 
   для: Саня   (28.05.2007 в 14:49)
 

Саня, чет не то показывает.
Ты сам глядел результат?

   
 
 автор: Trianon   (28.05.2007 в 17:16)   письмо автору
 
   для: fxsektor   (28.05.2007 в 17:15)
 

Я глядел.
что показывает?

   
 
 автор: fxsektor   (29.05.2007 в 09:04)   письмо автору
 
   для: Trianon   (28.05.2007 в 17:16)
 

Гляньте
http://www.proraboty.ru/xml.php

   
 
 автор: Trianon   (29.05.2007 в 09:55)   письмо автору
 
   для: fxsektor   (29.05.2007 в 09:04)
 

а iconv у Вас в системе есть?

   
 
 автор: fxsektor   (29.05.2007 в 10:03)   письмо автору
 
   для: Trianon   (29.05.2007 в 09:55)
 

Да, в конфиге:
...
--with-iconv=/usr/local
...

iconv support enabled
iconv implementation libiconv
iconv library version 1.9

   
 
 автор: fxsektor   (29.05.2007 в 14:49)   письмо автору
 
   для: fxsektor   (29.05.2007 в 09:04)
 

нет никаких идей?

   
 
 автор: Trianon   (29.05.2007 в 15:01)   письмо автору
 
   для: fxsektor   (29.05.2007 в 14:49)
 

В какой кодировке сохранен скрипт?

   
 
 автор: fxsektor   (29.05.2007 в 15:37)   письмо автору
 
   для: Trianon   (29.05.2007 в 15:01)
 

Был в ANSI перекодировал в utf-8 теперь почти получилось: http://www.proraboty.ru/xml.php
Но почему таблица такая кривая?

   
 
 автор: Trianon   (29.05.2007 в 16:13)   письмо автору
 
   для: fxsektor   (29.05.2007 в 15:37)
 

я бы не сказал, что это - почти получилось. По-моему стало только хуже.
Не говоря о том, что в этом случае encoding="windows-1251" - является ложным.
Попробуйте изменить кодировку, и перекодировать XML-строку предварительно iconv-ом.

   
 
 автор: fxsektor   (29.05.2007 в 17:01)   письмо автору
 
   для: Trianon   (29.05.2007 в 16:13)
 

А что Саня по поводу всего этого думает?

   
 
 автор: Саня   (30.05.2007 в 01:06)   письмо автору
19.8 Кб
 
   для: fxsektor   (29.05.2007 в 17:01)
 

Даже не знаю что и думать. У меня оба скрипта дали требуемый результат.

   
 
 автор: Trianon   (30.05.2007 в 01:24)   письмо автору
 
   для: Саня   (30.05.2007 в 01:06)
 

У меня - тоже. :) Я лишь предположил, что автоматический декодинг при работе под php4, мог быть и не реализован. Всё же честный XML это именно utf8. Но это всяко не недочет скрипта.

   
 
 автор: Саня   (30.05.2007 в 01:17)   письмо автору
 
   для: fxsektor   (29.05.2007 в 17:01)
 

Попробуйте ещё один вариант ------->
На регулярных выражениях.

   
 
 автор: fxsektor   (30.05.2007 в 13:36)   письмо автору
 
   для: Саня   (30.05.2007 в 01:17)
 

Да! Получилось!
Спасибо.

   
 
 автор: fxsektor   (30.05.2007 в 14:03)   письмо автору
 
   для: fxsektor   (27.05.2007 в 22:45)
 

Скажите, пожалуйста, можно ли из этого xml файла создать 2 SQL скрипта.
Проблема следующая: Есть БД в которой есть 2 таблицы в которые нужно занести информацию из этого xml файла. 1-я таблица ORGANIZATION - содержит поля для всех данных из XML файла кроме адресов. Адреса хранятся в другой таблице - ADDRESS.
Необходимо создать 2 SQL скрипта. 1-й заполняющий таблицу ADDRESS, 2-й заполняющий таблицу ORGANIZATION. Загвоздка в том, что в таблице организаций есть ссылки на адреса в таблице адресов.

INSERT INTO ORGANIZATION VALUES(2, 0, 0, 1, 2, 3, 0, 'Квартон', '41-77-07', '55-55-55', 'admin@quarton.ru', 'www.quarton.ru', 3, '2129056701', '212901001', '30101810600000000723', '02', '01', '049706723', 'банк', '40702810800000002840', 0, 0, '0');

INSERT INTO ORGANIZATION VALUES(4, 1, 2, 2, 428000, 'Чебоксары, пр. М.Горького');
В этой таблице юридические, физические, почтовые адреса должны находится соответственно по индексам: 1. - юр. адрес, 2 - физ. адрес, 3 - почтовый адрес, т.е. если какого то адреса в xml файле нет в скрипте должен быть 'пробел, или _, или 0...';


Господа, сможете помочь?

   
 
 автор: Саня   (30.05.2007 в 14:21)   письмо автору
 
   для: fxsektor   (30.05.2007 в 14:03)
 

Какая структура у этих таблиц?

   
 
 автор: fxsektor   (30.05.2007 в 14:44)   письмо автору
 
   для: Саня   (30.05.2007 в 14:21)
 

CREATE TABLE ORGANIZATION (
ID INTEGER NOT NULL, счетчик, заполняется автоматом от 2
ORGANIZATION_TYPE_ID INTEGER DEFAULT 0 NOT NULL, тип у всех должен быть 0
USERS_ID INTEGER DEFAULT 0 NOT NULL, во всех дожен быть 0
ACTUAL_ADDRESS_ID INTEGER DEFAULT 0 NOT NULL, ключ физ. адреса в таблице ADDRESS
LEGAL_ADDRESS_ID INTEGER DEFAULT 0, ключ юр. адреса в таблице ADDRESS
POSTAL_ADDRESS_ID INTEGER DEFAULT 0, ключ почт. адреса в таблице ADDRESS - этого поля нет в xml и для всех записей он 0 или _ или пробел
EDIT_USERS_ID INTEGER DEFAULT 0 NOT NULL, во всех должен быть 0
NAME VARCHAR(128) NOT NULL, имя "Название" в XML
TEL VARCHAR(64), "Номер телефона" в XML
FAX VARCHAR(64), этого поля нет в xml и для всех записей он 0 или _ или пробел
EMAIL VARCHAR(64), "E-mail" в XML
WEB VARCHAR(64), этого поля нет в xml и для всех записей он 0 или _ или пробел
HOURS INTEGER, часовой пояс, у всех стоит 3
REQ_INN VARCHAR(16), "ИНН" в XML
REQ_KPP VARCHAR(16), "КПП" в XML
REQ_RACCOUNT VARCHAR(32), "Расчетный счет" в XML
REQ_OKPO VARCHAR(16), "ОКПО" в XML
REQ_OKVED VARCHAR(128), этого поля нет в xml и для всех записей он 0 или _ или пробел
REQ_BIK VARCHAR(16), "ОКПО" в XML
REQ_BANK VARCHAR(128), "Банк" в XML
REQ_KACCOUNT VARCHAR(32), "Корр. счет" в XML
ACTIVITY INTEGER NOT NULL, этого поля нет в xml и для всех записей он 0 или _ или пробел
REMINDER INTEGER NOT NULL, этого поля нет в xml и для всех записей он 0 или _ или пробел
COMMENTS BLOB SUB_TYPE 1 SEGMENT SIZE 2048 Сюда вносятся через запятую значения полей из xml "Наименование клиента", "Тип клиента", "Дата рождения"
);



CREATE TABLE ADDRESS (
ID INTEGER NOT NULL, счетчик, заполняется автоматом
COUNTRY_ID INTEGER DEFAULT 0 NOT NULL, везде 1
REGION_ID INTEGER DEFAULT 0 NOT NULL, везде 2
CITY_ID INTEGER DEFAULT 0 NOT NULL, везде 2
POST_INDEX VARCHAR(16), везде 428000
ADDRESS BLOB SUB_TYPE 1 SEGMENT SIZE 1024 Поле "Физ. адрес", поле "Юр. адрес",
);

Ончень интересная ситуация с этой таблицей: для каждой организации здесь забито 3 записи (ID): 1,4,7, 10,13,16.... - Физ. адрес
2,5,8,11,14,17..... - Юр. адрес
3,6,9,12,15,18...... - Почтовый адрес - в XML почтового адреса нет, и в таблице он должен содержать 0 или _

   
 
 автор: Саня   (30.05.2007 в 18:05)   письмо автору
 
   для: fxsektor   (30.05.2007 в 14:44)
 

------->
В конце скрипта можно написать print_r($array2) и посмотреть какие сормулировались запросы.

   
 
 автор: fxsektor   (31.05.2007 в 10:00)   письмо автору
 
   для: Саня   (30.05.2007 в 18:05)
 

Саня посмотри, пожалуйста, http://www.proraboty.ru/xml2.php
Было бы лучше, если бы было выведено список INSERT INTO ADDRESS
INSERT INTO ORGANIZATION
необходимости в непосредственной закачки в mysql базу нету, эти данные через буфер обмена попадут SQL Editor и внесены в БД FIREBIRD

   
 
 автор: fxsektor   (31.05.2007 в 10:50)   письмо автору
 
   для: fxsektor   (31.05.2007 в 10:00)
 


for ( $i = 0; $i < count($array2); $i++ ) {
  $array2[$i]['sql1'] = "INSERT INTO address VALUES(0, 1, 2, 2, '428000', '".$array2[$i]['Физ.адрес']."')"; // физический адрес
  $array2[$i]['sql2'] = "INSERT INTO address VALUES(0, 1, 2, 2, '428000', '".$array2[$i]['Юр.адрес']."')"; // юридический адрес
  $array2[$i]['sql3'] = "INSERT INTO address VALUES(0, 1, 2, 2, '428000', '0')"; // почтовый адрес
//  mysql_query($array2[$i]['sql1']);
    print $array2[$i]['sql1'];
  $addr1 = mysql_insert_id(); // id физического адреса
//  mysql_query($array2[$i]['sql2']);
    print $array2[$i]['sql2'];
  $addr2 = mysql_insert_id(); // id юридического адреса
//  mysql_query($array2[$i]['sql3']);
   print $array2[$i]['sql3'];
  $addr3 = mysql_insert_id(); // id почтового адреса


что-то типа такого

   
 
 автор: Саня   (31.05.2007 в 12:47)   письмо автору
 
   для: fxsektor   (31.05.2007 в 10:00)
 

Ну яже говорил - поставьте в конец кода print_r($array2) и получите тексты всех SQL-запросов.

   
 
 автор: fxsektor   (31.05.2007 в 13:46)   письмо автору
 
   для: Саня   (31.05.2007 в 12:47)
 

Саня, спасибо, что ты откликнулся.
Понимаешь, в этом xml файле около 2000 организаций.
print_r выводит весь массив http://www.proraboty.ru/xml3.php
INSERT INTO address VALUES(0, 1, 2, 2, '428000', 'Физический адрес')
INSERT INTO address VALUES(0, 1, 2, 2, '428000', 'Чебоксары, пр. М.Горького')
INSERT INTO address VALUES(0, 1, 2, 2, '428000', '0')
здесь, все ОК, кроме первого 0, который должен расти от некоторго значения (зависит от нынешнего значения счетчика)
INSERT INTO organization VALUES(0, 0, 0, id_физ, id_юр, id_почт, 0,
'Квартон', 'номер телефона', ' ',
'email', ' ', 3, '2129056701',
'212901001', '30101810600000000723',
'02', ' ', '049706723',
'банк', '40702810800000002840', ' ', ' ',
'Квартон, Квартон ООО, Юр.лицо, 01012000');
первый 0 здесь должен тоже расти от определенного значения, id_физ, id_юр, id_почт, - должны соответствовать ключу в таблице ADDRESS для данной организации

Было бы замечательно вывести чистый SQL скрипт типа (сначала должны быть заведены адреса в таблице ADDRESS, т.к. субдшка ругается на отсутствующие ключи):
INSERT INTO address VALUES(3, 1, 2, 2, '428000', 'Физический адрес')
INSERT INTO address VALUES(4, 1, 2, 2, '428000', 'Чебоксары, пр. М.Горького')
INSERT INTO address VALUES(5, 1, 2, 2, '428000', '0')
INSERT INTO organization VALUES(2, 0, 0, 3, 4, 5, 0,
'Квартон', 'номер телефона', ' ',
'email', ' ', 3, '2129056701',
'212901001', '30101810600000000723',
'02', ' ', '049706723',
'банк', '40702810800000002840', ' ', ' ',
'Квартон, Квартон ООО, Юр.лицо, 01012000');
и далее следующая организация

   
 
 автор: Саня   (31.05.2007 в 13:59)   письмо автору
3.9 Кб
 
   для: fxsektor   (31.05.2007 в 13:46)
 

Так?

   
 
 автор: fxsektor   (31.05.2007 в 15:14)   письмо автору
 
   для: Саня   (31.05.2007 в 13:59)
 

Да, так, посмотри http://www.proraboty.ru/xml4.php
я там изменил чуть:

$array = array("Название" => "", "Описание" => "", "E-mail" => "", "Номер телефона" => "",
               "Тип клиента" => "", "Наименование клиента" => "", "Юр.адрес" => "",
               "Физ.адрес" => "", "ИНН" => "", "КПП" => "", "Расчетный счет" => "", "Банк" => "",
               "Корр. счет" => "", "БИК" => "", "ОКОНХ" => "", "ОКПО" => "", "Дата рождения" => "",
               "Удостоверение" => "", "Серия" => "", "Номер" => "", "Место выдачи" => "",
               "Дата выдачи" => "", "Пол" => "", "Подставлять телефон в бланке" => "",
               "Агент" => "");

preg_match_all("!<client>(.*)</client>!isU", $xml, $m);
for ( $i = 0; $i < count($m[1]); $i++ ) {
  preg_match_all('!<field name="([^"]+)">(.*)</field>!isU', $m[1][$i], $fields);
  $array2[$i] = $array;
  for ( $j = 0; $j < count($fields[1]); $j++ ) {
    $array2[$i][$fields[1][$j]] = $fields[2][$j];
  }
}

for ( $i = 0, $j = 1, $k = 2, $l = 3; $i < count($array2); $i++, $j += 3, $k +=3, $l +=3  ) {
  $array2[$i]['sql1'] = "INSERT INTO address VALUES(".$j.", 1, 2, 2, '428000', '".$array2[$i]['Физ.адрес']."')"; // физический адрес
  $array2[$i]['sql2'] = "INSERT INTO address VALUES(".$k.", 1, 2, 2, '428000', '".$array2[$i]['Юр.адрес']."')"; // юридический адрес
  $array2[$i]['sql3'] = "INSERT INTO address VALUES(".$l.", 1, 2, 2, '428000', '0')"; // почтовый адрес
  $array2[$i]['sql4'] = "INSERT INTO organization VALUES(0, 0, 0, ".$j.", ".$k.", ".$l.", 0,
                        '".$array2[$i]['Название']."', '".$array2[$i]['Номер телефона']."', ' ',
                        '".$array2[$i]['E-mail']."', ' ', 3, '".$array2[$i]['ИНН']."',
                        '".$array2[$i]['КПП']."', '".$array2[$i]['Расчетный счет']."',
                        '".$array2[$i]['ОКПО']."', ' ', '".$array2[$i]['БИК']."',
                        '".$array2[$i]['Банк']."', '".$array2[$i]['Корр. счет']."', ' ', ' ',
                        '".$array2[$i]['Название'].", ".$array2[$i]['Наименование клиента'].", ".
                        $array2[$i]['Тип клиента'].", ".$array2[$i]['Дата рождения']."');"; // данные организации
  print $array2[$i]['sql1'].'<br>';
  print $array2[$i]['sql2'].'<br>';
  print $array2[$i]['sql3'].'<br>';
  print $array2[$i]['sql4'].'<br>';
}
//print_r($array2);

Нужно лишь добавить 2 переменные:
1. начало индекса таблицы ADDRESS
2. начало индекса таблицы ORGANIZATION
и высчитываение индекса здесь NSERT INTO organization VALUES(<<<<0>>>>, 0, 0, ".$j.", ".$k.", ".$l.", 0,

   
 
 автор: Саня   (31.05.2007 в 15:21)   письмо автору
 
   для: fxsektor   (31.05.2007 в 15:14)
 

Всё работает? СУБД не ругается?

   
 
 автор: fxsektor   (31.05.2007 в 15:57)   письмо автору
 
   для: Саня   (31.05.2007 в 15:21)
 

он, ругнется, т.к. будут совпадать индексы (первая цифра) в таблице ORGANIZATION

   
 
 автор: Саня   (31.05.2007 в 17:17)   письмо автору
 
   для: fxsektor   (31.05.2007 в 15:57)
 

Ну тогда найдите последний id в таблице и подставьте в переменные $j = последний_id+1, $k = последний_id+2, $l = последний_id+3;

   
Rambler's Top100
вверх

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