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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Преобразование xml в табличный вид.

Сообщения:  [1-10]    [11-20]   [21-30]  [31-35] 

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

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

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

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

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

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

   
 
 автор: 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 в 13:59)   письмо автору
3.9 Кб
 
   для: fxsektor   (31.05.2007 в 13:46)
 

Так?

   
 
 автор: 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 в 12:47)   письмо автору
 
   для: fxsektor   (31.05.2007 в 10:00)
 

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

   
 
 автор: 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 почтового адреса


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

   
 
 автор: 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

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

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

   

Сообщения:  [1-10]    [11-20]   [21-30]  [31-35] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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