Я пытался вставить новые данные в существующий файл 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" ?>