Форум сетевых администраторов
Показаны 18 сообщений на этой странице

Форум сетевых администраторов (http://netadmin.ws/forum/index.php)
- PHP (http://netadmin.ws/forum/forumdisplay.php?forumid=6)
-- Xml экспорт/импорт информации (http://netadmin.ws/forum/showthread.php?threadid=10279)


Помещено he][es 10-02-2005 в 20:20:

Xml экспорт/импорт информации

Задача такая: есть сайт, пользователь заполняет форму, скрипт генерит XML документ (есть др. предложения?) и отправляет его по почте на некий адрес. Там чел получил этот файл. И скормил его в принципе тому же сайту ("внутреннему"), скрипт его пропарсил и добавил данные из документа в MySQL базу...

Вот дамп 3х таблиц в которые будет добавляться информация:


code:

CREATE TABLE soiskateli (
  soiskatel_id smallint(4) NOT NULL auto_increment,     // id должен браться из авто_инкремента и подставляться в 2 др. таблицы $id = mysql_insert_id(); и нет проблем...
  data_vnesenia date NOT NULL default '0000-00-00',     //текущая дата
  poslednii_prosmotr date NOT NULL default '0000-00-00',   // =0
  kol_vo_prosmotrov smallint(5) NOT NULL default '0',      // =0
  fio tinytext NOT NULL,
  sex enum('0','1','2') NOT NULL default '0',
  dolgnost_id tinyint(4) default NULL,
  zp mediumint(6) default NULL,
  work_graph tinyint(1) default NULL,
  zaniatost tinyint(1) default NULL,
  data_rogdenia date NOT NULL default '0000-00-00',
  famile_status enum('1','2','3','4') NOT NULL default '1',
  address tinytext,
  email tinytext,
  phone tinytext,
  education_type enum('1','2','3','4','5','6','7','8') NOT NULL default '1',
  education_spec tinytext NOT NULL,
  prof_experience text,
  prof_skill text,
  driver_certificat enum('1','0') NOT NULL default '0',
  foreign_passport enum('1','0') NOT NULL default '0',
  recommendations tinytext,
  photo_path tinytext,                // =0
  shelf_time date default '2001-01-01',                // =0
  publish enum('1','0') default '1',
  verified enum('0','1') default '0',                // =0
  nature tinytext,                // =0
  avto_owne enum('0','1') NOT NULL default '0',
  PRIMARY KEY  (soiskatel_id),
  KEY dolgnost_id (dolgnost_id)
) TYPE=MyISAM;

CREATE TABLE soiskatel_education (
  education_id smallint(5) NOT NULL auto_increment,                // простой авто_инкремент
  soiskatel_id smallint(4) NOT NULL default '0',                // =$id;
  date_from date NOT NULL default '0000-00-00',
  date_to date NOT NULL default '0000-00-00',
  school_name tinytext NOT NULL,
  education_type enum('1','2','3','4','5','6','7','8') NOT NULL default '4',
  education_spec tinytext NOT NULL,
  education_mark tinyint(1) default NULL,
  PRIMARY KEY  (education_id),
  KEY soiskatel_id (soiskatel_id)
) TYPE=MyISAM;

CREATE TABLE soiskatel_work_stage (
  work_id smallint(5) NOT NULL auto_increment,                //  простой авто_инкремент
  soiskatel_id smallint(4) NOT NULL default '0',                // =$id;
  date_from date NOT NULL default '0000-00-00',
  date_to date NOT NULL default '0000-00-00',
  job_name tinytext NOT NULL,
  sfera_deiatelnosti_id tinyint(3) NOT NULL default '0',
  dolgnost_id tinyint(4) default NULL,
  obiazanosti tinytext,
  PRIMARY KEY  (work_id),
  KEY soiskatel_id (soiskatel_id)
) TYPE=MyISAM;


см. так же мои комментарии.
Вот такой я подумал сделать XML документ

PHP:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<soiskateli>
<soiskatel verified="1" dolgnost_id="3" phone="(3852) 45-5" education_spec="Прикладная информатика в экономике" poslednii_prosmotr="27.04.2004" recommendations="Василий Иванович Чапаев, командир конного полка." photo_path="Null" fio="Иванов Иван Иванович" prof_experience="Создание вэб-представительства компании ЧП &quot;з&quot;" foreign_passport="" publish="1" nature="Null" address="г.Барнаул, пр-т им. Ленина 24-6" kol_vo_prosmotrov="0" data_rogdenia="07.06.1975" famile_status="1" avto_owne="1" data_vnesenia="27.04.2004" work_graph="2" email="ivanov@ivan.ru" prof_skill="Отличные знание компьютерной техники..." sex="1" driver_certificat="1" zp="1000" shelf_time="01.01.2010" education_type="1" zaniatost="2">
<educations>
<education education_id="1" date_from="01.09.1985" date_to="30.05.1995" school_name="Средняя общеобразовательная школа 56" education_type="1" education_spec="" education_mark="5"/>
<education education_id="2" date_from="01.09.1995" date_to="31.05.2000" school_name="АлтГУ" education_type="1" education_spec="Прикладная информатика в экономике" education_mark="5"/>
</educations>
<works>
<work work_id="2" date_from="01.04.2004" date_to="30.04.2004" job_name="БЛВЗ" sfera_deiatelnosti_id="2" dolgnost_id="11" obiazanosti="Null"/>
<work dolgnost_id="2" sfera_deiatelnosti_id="3" date_from="09.03.2000" date_to="02.04.2004" work_id="1" obiazanosti="Null" job_name="АКОО &quot;Молодые журналисты Алтая&quot;"/>
</works>
</soiskatel>
<soiskatel data_vnesenia="10.05.2004" poslednii_prosmotr="01.01.0001" kol_vo_prosmotrov="0" fio="Чапаев Василий Иванович" sex="1" dolgnost_id="1" zp="15555" work_graph="1" zaniatost="1" data_rogdenia="01.10.1935" famile_status="2" address="Красногвардейская армия 1." email="chap@ev.ru" phone="89132174167" education_type="3" education_spec="Полководец" prof_experience="Управление красногвардейскй армией. Запуск в бой полков." prof_skill="Управление Петькой и Анкой - 5\nКонная навигация - 5" driver_certificat="1" foreign_passport="1" recommendations="Главный генерал красной армии..." photo_path="2_1084204522_face.jpg" shelf_time="30.07.2005" publish="1" verified="1" nature="Null" avto_owne="0">
<educations>
<education education_id="3" date_from="01.05.2004" date_to="30.05.2004" school_name="Третья ковалерийская академия" education_type="2" education_spec="Курсы повышения конного мастерства" education_mark="5"/>
</educations>
<works>
<work work_id="4" date_from="01.01.2001" date_to="01.01.2004" job_name="Первый ковалерийский полк" sfera_deiatelnosti_id="1" dolgnost_id="1" obiazanosti="Null"/>
<work work_id="3" date_from="01.05.2004" date_to="30.05.2004" job_name="Академия конного спорта" sfera_deiatelnosti_id="3" dolgnost_id="3" obiazanosti="Null"/>
</works>
</soiskatel>
</soiskateli>


(для 2х анкет к примеру)
Возможно есть предложения по его изменению?
Сделать его проблем нет... не заморачиваться и обычным

PHP:
$xml_text="<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>";


с подстановкой переменных и последующим выводом.
Опять же готов выслушать предложения...

На этапе парсенья этого док-та

PHP:

if (file_exists('anketi.xml')) {
    
$xml = simplexml_load_file('anketi.xml');
    
$s_id = 0;
    foreach (
$xml->soiskatel as $k) {
        if(
$xml->soiskatel[$s_id]){
            foreach(
$xml->soiskatel[$s_id]->attributes() as $a => $b) {
                
$b = iconv("UTF-8", "KOI8-R", "$b");
                echo 
$a,'=="',$b,"\"\n";
            }
            
// либо так
            
print "education_spec=".iconv("UTF-8", "KOI8-R", $xml->soiskatel[$s_id]['education_spec'])."\n";
            
$s_id++;
            print 
"\n\n\n";
        } else {
            exit(
'Failed to open anketi.xml.');
        }
    }
}



Вопрос первый, UTF и никак иначе? А то как я понял при парсеньи проблемы?..
Ваши советы?..

__________________
Админ - вождь Апачей...


Помещено SCHIZO 13-02-2005 в 16:04:

...а чего, с encoding="koi8-r" ошибки выдает?

__________________
FAQ OFF


Помещено he][es 13-02-2005 в 16:56:

SCHIZO угу... какие то запарки кри "импорте".. крякозяброй...

he][es добавил 13-02-2005 в 16:57:56:
SCHIZO а в общем и целом какие нить советы будут?
исправления? Ошибки?

__________________
Админ - вождь Апачей...


Помещено SCHIZO 14-02-2005 в 08:14:

he][es он у тебя вообще с кодировкой отличной от UTF-8 не работает или просто с читабельностью вывода пробемы?

P.S.
Я бы не стал использовать экпериментальное расширение для продакшн задач. У меня есть класс для создания собственного XML парсера. Тебе останется только написать произвольные функции обработки данных и подсунуть их экземпляру этого класса.

Если интересно могу выложить.

__________________
FAQ OFF


Помещено he][es 15-02-2005 в 11:01:

quote:
просто с читабельностью вывода пробемы

education_spec=="п÷я─п╦п╨п╩п╟п╢п╫п╟я▐ п╦п╫я└п╬я─п╪п╟я┌п╦п╨п╟ п╡ я█п╨п╬п╫п╬п╪п╦п╨п╣"
Ð_то он взял из файла в koi8-r информацию и вывел без трансформации из UTF в koi8-r. Я так понял читает он вроде правильно, но у него "внутренняя" кодировка UTF и он в ней выдает...

quote:
Я бы не стал использовать экпериментальное расширение для продакшн задач.

Т.е.? вы про что?..
quote:
Если интересно могу выложить.

Интересно конечно. Только я не совсем понимаю. У меня нет чёткого понмания что зачем и куда... Нужен ли мне парсер?
Мне не хватит того что я написал выше?
Я ведь прочто открываю файл и обращаюсь к переменным типа
print "education_spec=".iconv("UTF-8", "KOI8-R", $xml->soiskatel[$s_id]['education_spec'])."\n";
и засовываю их в БД...

__________________
Админ - вождь Апачей...


Помещено fStrange 15-02-2005 в 11:37:


PHP:


setlocale
(LC_ALL, "ru_RU.CP1251");


эта строчка не поможет?

может из - за этого кракозябры?

__________________
Новая жизнь HMM3(Герои 3.5 WoG)http://hmm3.fclan.ru


Помещено SCHIZO 15-02-2005 в 18:07:

fStrange при чем тут cp1251?

he][es я запутался в твоих объяснениях... значит в XML документе ты объявляешь что он в кодировке UTF-8. А реально в какой? Ð_то раз.

Что мешает объявить кодировку не UTF-8 а KOI8-R? (или любую другую соответствующюю кодировке запроса при отправке формы) Ð_то два.

Третье. С какого момента текст становиться нечитабельным? На каком этапе? После какого преобразования? Или только при выводе из базы после записи, а напрямую из БД читается нормально?

__________________
FAQ OFF


Помещено he][es 16-02-2005 в 06:53:

quote:
А реально в какой?

Ð_еально в той, в какой указано. (Вообще мне бы желательно в кои. Что б не конвертировать при экспорте).

quote:
или любую другую соответствующюю кодировке запроса при отправке формы

Не совсем понял... Т.е. реальную кодировку? Так оно и есть!...

quote:
С какого момента текст становиться нечитабельным? На каком этапе?

Ну я ещё никуда ничего не пишу. Просто открываю файл. с той кодировкой которая указана в нем. (желательно КОИ) и вывожу все значения записаные в нем на экран... Тут то и всё "всплывает"...
Если не сделать
iconv("UTF-8", "KOI8-R", $xml->soiskatel[$s_id]['VAR_NAME'])
со всеми переменными, то он выведет все в UTF. воот. Соответственно и в базу он в UTF записал бы...

__________________
Админ - вождь Апачей...


Помещено SCHIZO 16-02-2005 в 08:50:

he][es ты пробовал указывать в декларации XML документа encoding="KOI8-R"? Судя по последнему посту ты сразу туда UTF-8 пишешь.. Или я чего то недопонял?

__________________
FAQ OFF


Помещено he][es 16-02-2005 в 15:36:

SCHIZO Угу. не совсем. Без разницы в какой кодировке док-т (декларация ВСЕГДА соответствует реальной кодировке (я всё правильно указываю)) на "экран" он всегда его в UTF отдает!..

__________________
Админ - вождь Апачей...


Помещено SCHIZO 16-02-2005 в 18:49:

he][es, тогда это не лечится... можно ускорить процесс выводя всю страницу в UTF-8, или накапливая данные в буфере вывода вызвать iconv один раз..

Ð_асширение simplexml экспериментальное, в доках ничего кроме функций и методов не описано. В продакшн вариантах функций работы с XML хоть константы какие то есть или параметры позволяющие кодировку явно указывать, а тут вообще ничего.

__________________
FAQ OFF


Помещено he][es 16-02-2005 в 22:35:

quote:
В продакшн вариантах функций работы с XML

Ð_то что такое???
quote:
можно ускорить процесс выводя всю страницу в UTF-8, или накапливая данные в буфере вывода вызвать iconv один раз..

1е не получится... Весь сайт на кои, 2ое тоже. это просто куча переменных. их как бы не накопишь...

И выводить как таковой текст мне в принципе не оч. важно. Ð_то будет оч. редко делаться, главное импорт в БД.

А так, кроме кодировки, мой вариант как? Пойдёт? Или есть какие нить глюки, подводные камни, etc.?

__________________
Админ - вождь Апачей...


Помещено SCHIZO 17-02-2005 в 10:40:

he][es ХЗ, я не пробовал..

__________________
FAQ OFF


Помещено he][es 17-02-2005 в 10:56:

SCHIZO а по первому вопросу?..
(н в принцие? Грубых ошибок нет?)

__________________
Админ - вождь Апачей...


Помещено SCHIZO 17-02-2005 в 15:45:

he][es, попробуй с error_reporting E_ALL, все увидишь сам..

__________________
FAQ OFF


Помещено he][es 17-02-2005 в 16:28:

Да неее! Скрипт то работает. С этим я разберусь!.. Я как бы про "идеологию"! (которую я не до конца понимаю)

__________________
Админ - вождь Апачей...


Помещено SCHIZO 17-02-2005 в 19:53:

he][es, у меня к сожалению нет времени чтобы анализировать чужой код, своего хватает.. Самое главное чтоб тебя или заказчика устраивало.

P.S.
Используй Zend Studio - там есть анализатор. Иногда ругается правда на чушь всякую но вообще работает хорошо.
STFW - Yandex, Google, etc...

__________________
FAQ OFF


Помещено he][es 17-02-2005 в 21:30:

цена за копию $249 Издеваешься?
(А может у тебя есть? С лекарством?)

STFW это что? Типа RTFM? Как расшифровывается?

__________________
Админ - вождь Апачей...


Формат времени GMT. Текущее время 03:07.
Показаны 18 сообщений на этой странице

Powered by: vBulletin Version 2.2.4
Copyright © Jelsoft Enterprises Limited 2000, 2001.