Вставка данных в файл XML с помощью PHP DOM

Я пытался вставить новые данные в существующий файл XML, но он не работает. Вот мой xml-файл:

<list> <activity>swimming</activity> <activity>running</activity> <list> 

Теперь моя идея заключалась в создании двух файлов: индексной страницы, где она отображает то, что находится в файле, и предоставляет поле для вставки новых элементов и страницу php, которая будет вставлять данные в файл XML. Вот код для index.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 в <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'); ?> 

Пользователь должен получить доступ к index.php, где он увидит список текущих действий, присутствующих в файле XML, и текстовое поле ниже, где он сможет вставить новые действия. После нажатия кнопки отправки страница вызовет insert.php, которая содержит код, который открывает XML-файл в дереве DOM, вставляет новый узел под корневым узлом и вызывает страницу index.php, где пользователь должен быть способный видеть список мероприятий, свою новую деятельность там под другими. Это не работает. Когда я нажимаю кнопку, чтобы отправить новую запись, страницы обновляются и, по-видимому, ничего не происходит, XML такой же, как и раньше. Что я сделал не так? Кроме того, я хотел бы знать, есть ли лучший способ сделать это.

является вашей копией кода и вставлена ​​из ваших существующих файлов? если так, я вижу две потенциальные проблемы:

 <form name='input' action'insert.php' method='post'> // should be: <form name="input" action="insert.php" method="post"> 

note: вам не хватает action = "insert.php" , что приведет к тому, что форма просто перезагрузится без отправки, что является поведением, которое вы описываете.

во-вторых, убедитесь, что у вас есть разрешение на запись в «sample.xml». вы можете подтвердить, что вы на самом деле пишете что-нибудь:

 print 'I wrote '.$xmldoc->save('sample.xml').' bytes of data'; 

Окончательное решение

sample.xml

 <list> <activity>swimming</activity> <activity>running</activity> <activity>Jogging</activity> <activity>Theatre</activity> <activity>Programming</activity> </list> 

index.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> в <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'); ?> 

$ newText = $ xmldoc-> createTextNode ($ newActv);

Измените эту строку на

$ newText = $ xmldoc-> createTextNode ($ newAct);

На самом деле вы допустили ошибки в двух местах.

Эта строка должна быть, я думаю, из-за опечатки вы пропустили знак равенства. Также

Эти строки должны быть

Попробуйте сейчас, это должно сработать, Hop это будет иметь смысл

это код, который я работаю для меня.

index.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'); ?> в <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'); ?> 

sample.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" ?>