ilkz
Новичок
Форматированный вывод XML-дерева в файл
Всем привет!
Вопрос такой. Есть код (приведен ниже). Его задача проверить, существует ли в базе (XML-файле) юзер или нет. Если существует - скрипт умирает. Если не существует - юзер должен добавиться в базу.
Все, на самом деле, работает, НО. "но" заключено в том, что форматирование при сохранении в файл - исчезает. Причем флаг formatOutput - на него ПХП вообще никак не реагирует... Сломал всю голову - не догоняю где косяк...
Как вариант - грешу на load() после этого флага...
Вот код:
Вот такой код должен получиться:
А он выдает вот такое:
Всем привет!
Вопрос такой. Есть код (приведен ниже). Его задача проверить, существует ли в базе (XML-файле) юзер или нет. Если существует - скрипт умирает. Если не существует - юзер должен добавиться в базу.
Все, на самом деле, работает, НО. "но" заключено в том, что форматирование при сохранении в файл - исчезает. Причем флаг formatOutput - на него ПХП вообще никак не реагирует... Сломал всю голову - не догоняю где косяк...
Как вариант - грешу на load() после этого флага...
Вот код:
PHP:
<?
foreach($_POST as $var => $value) $$var=$value;
if(!@$do_register){
require_once("forms/register.frm");
die;
}
$user_exists=false;
function walk($node, $level=0){ //рекурсивный обходчик дерева
global $login, $password, $user_exists;
for($i=0; $i<$node->childNodes->length; $i++){
if($node->childNodes->item($i)->nodeType == XML_TEXT_NODE) continue;
else{
$new_node = $node->childNodes->item($i);
for($space=0; $space<$level; $space++) continue;
if($new_node->getAttribute('login') == $login && $new_node->getAttribute('password') == md5($password))
$user_exists=true;
walk($new_node, $level+3);
}
}
}
$xmlfile="users.xml";
$xml = new DOMDocument('1.0');
$xml->formatOutput = true;
$xml->load($xmlfile);
//проверка, что такой юзер уже существует
$xpath = new DOMXPath($xml);
walk($xpath->query("//userlist")->item(0));
if($user_exists) die("Пользователь с такими именем и паролем уже существует!");
//если такого пользователя нет, то добавляем
$root = $xml->getElementsByTagName('userlist')->item(0);
$user = $root->appendChild(new DOMElement('user'));
$login = $user->setAttributeNode(new DOMAttr('login', $login));
$password = $user->setAttributeNode(new DOMAttr('password', md5($password)));
$modules = $root->appendChild(new DOMElement('modules'));
if(!$xml->save($xmlfile)) echo "Ошибка сохранения XML!";
else echo "Вы успешно зарегистрированы в системе!";
?>
PHP:
<?xml version="1.0" encoding="windows-1251"?>
<userlist>
<user login="aaa" password="bbb"/>
<modules/>
</userlist>
PHP:
<?xml version="1.0" encoding="windows-1251"?>
<userlist>
<user login="aaa" password="bbb"/><modules/></userlist>