Вставка данных в XML-файл с помощью PHP DOM
Я пытаюсь вставить новые данные в существующий XML-файл, но он не работает. Вот мой xml-файл:
<list>
<activity>swimming</activity>
<activity>running</activity>
<list>
Теперь моя идея состояла в создании двух файлов: индексной страницы, где она отображает то, что находится в файле, и предоставляет поле для вставки новых элементов, и php-страницы, которая вставит данные в XML-файл. Вот код индекса.на PHP:
<html>
<head><title>test</title></head>
</head>
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('sample.xml', LIBXML_NOBLANKS);
$activities = = $xmldoc->firstChild->firstChild;
if($activities!=null){
while(activities!=null){
echo $activities->textContent.'<br/>';
activities = activities->nextSibling.
}
}
?>
<form name='input' action='insert.php' method='post'>
insert activity:
<input type='text' name='activity'/>
<input type='submit' value='send'/>
</form>
</body>
</html
а вот код для вставки.на PHP:
<?php
header('Location:index.php');
$xmldoc = new DOMDocument();
$xmldoc->load('sample.xml');
$newAct = $_POST['activity'];
$root = $xmldoc->firstChild;
$newElement = $xmldoc->createElement('activity');
$root->appendChild($newElement);
$newText = $xmldoc->createTextNode($newAct);
$newElement->appendChild($newText);
$xmldoc->save('sample.xml');
?>
пользователь должен получить доступ к индексу.php, где он увидит список текущих действий, присутствующих в XML-файле, и текстовое поле ниже, где он может вставить новые действия. После нажатия кнопки "Отправить" страница вызовет команду "Вставить".php, который содержит код, открывающий XML-файл в дереве DOM, вставляет новый узел под корневым узлом и вызывает индекс.php страница, где пользователь должен иметь возможность видеть список действий, его новая деятельность там под другими. Это не работает. Когда я нажимаю на кнопку, чтобы отправить новую запись, страницы обновляются и, по-видимому, ничего не происходит, XML такой же, как и раньше. Что я сделал не так? Кроме того, я хотел бы знать, если есть лучший способ сделать это.
6 ответов
является ли ваш блок кода копией и вставкой из существующих файлов? если я вижу две потенциальные проблемы:
<form name='input' action'insert.php' method='post'> // should be:
<form name="input" action="insert.php" method="post">
Примечание: вам не хватает action
="insert.php"
, что заставило бы форму просто перезагрузить себя без отправки, что является поведением, которое вы описываете.
во-вторых, убедитесь, что у вас есть разрешение на запись "образец.XML." вы можете подтвердить, если вы на самом деле ничего писать:
print 'I wrote '.$xmldoc->save('sample.xml').' bytes of data';
Окончательное Решение
образец.В XML
<list>
<activity>swimming</activity>
<activity>running</activity>
<activity>Jogging</activity>
<activity>Theatre</activity>
<activity>Programming</activity>
</list>
.в PHP
<html>
<head><title>test</title></head>
</head>
<?php
$xmldoc = new DOMDocument();
$xmldoc->load("sample.xml", LIBXML_NOBLANKS);
$activities = $xmldoc->firstChild->firstChild;
if($activities!=null){
while($activities!=null){
echo $activities->textContent."<br/>";
$activities = $activities->nextSibling;
}
}
?>
<form name="input" action="insert.php" method="post">
insert activity:
<input type="text" name="activity"/>
<input type="submit" value="send"/>
</form>
</body>
</html>
вставить.в PHP
<?php
header('Location:index.php');
$xmldoc = new DOMDocument();
$xmldoc->load('sample.xml');
$newAct = $_POST['activity'];
$root = $xmldoc->firstChild;
$newElement = $xmldoc->createElement('activity');
$root->appendChild($newElement);
$newText = $xmldoc->createTextNode($newAct);
$newElement->appendChild($newText);
$xmldoc->save('sample.xml');
?>
$newText = $xmldoc - >createTextNode ($newActv);
измените эту строку
$newText = $xmldoc - >createTextNode ($newAct);
на самом деле вы сделали ошибки в двух местах.
Эта линия должна быть Думаю, из-за опечатки ты пропустил знак равенства. Также
Эти строки должны быть
попробуйте сейчас, должно работать, Хоп это имело бы некоторый смысл
это код, который я работаю для меня.
.в PHP<html>
<head><title>test</title></head>
</head>
<?php
$xmldoc = new DOMDocument();
$xmldoc->load('sample.xml', LIBXML_NOBLANKS);
$activities = $xmldoc->firstChild->firstChild;
if($activities!=null){
while($activities!=null){
echo $activities->textContent.'<br/>';
$activities = $activities->nextSibling;
}
}
?>
<form name='input' action='insert.php' method='post'>
insert activity:
<input type='text' name='activity'/>
<input type='submit' value='send'/>
</form>
</body>
</html>
insert.php
<?php
header('Location:index.php');
$xmldoc = new DOMDocument();
$xmldoc->load('sample.xml');
$newAct = $_POST['activity'];
$root = $xmldoc->firstChild;
$newElement = $xmldoc->createElement('activity');
$root->appendChild($newElement);
$newText = $xmldoc->createTextNode($newAct);
$newElement->appendChild($newText);
$xmldoc->save('sample.xml');
?>
образец.в XML
<list>
<activity>swimming</activity>
<activity>running</activity>
</list>
Я думаю, что знаю, в чем проблема с вашим кодом. Вы не должны так писать:<?xml-stylesheet type="text/xsl" href="sample.xsl" ?>
Правильный код:
<?xml:stylesheet type="text/xsl" href="sample.xsl" ?>