Вставка данных в 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" ?>