Как обновить/добавить данные в файл XML с помощью PHP?

Я новичок в PHP. Я пытаюсь создать XML-документ из значений формы HTML.

Вот PHP-код:

 <?php

    if (isset($_POST['lsr-submit']))
    {
        header('Location: http://movie1b.tk');
    }

$str = '<?xml version="1.0" encoding="UTF-8"?><entrys></entrys>';
$xml = simplexml_load_string($str);

$fname = $_POST['firstname'];
$lname = $_POST['lastname'];
$location = $_POST['location'];
$report = $_POST['report'];
$description = $_POST['desc'];

$fname = htmlentities($fname, ENT_COMPAT, 'UTF-8', false);
$lname = htmlentities($lname, ENT_COMPAT, 'UTF-8', false);
$location = htmlentities($location, ENT_COMPAT, 'UTF-8', false);
$report = htmlentities($report, ENT_COMPAT, 'UTF-8', false);
$description = htmlentities($description, ENT_COMPAT, 'UTF-8', false);

$xml->reports = "";
$xml->reports->addChild('fname', $fname);
$xml->reports->addChild('lname', $lname);
$xml->reports->addChild('location', $location);
$xml->reports->addChild('report', $report);
$xml->reports->addChild('description', $description);

$doc = new DOMDocument('1.0');
$doc->formatOutput = true;
$doc->preserveWhiteSpace = true;
$doc->loadXML($xml->asXML(), LIBXML_NOBLANKS);
$doc->save('test2.xml', 'a');

?>

А вот HTML-код:

<form name="lsrReports" action="test.php" method="post">
<table width="50%" align="center" cellpadding="2" cellspacing="0">
  <tr>
    <td> First name:</td><td> <input type="text" name="firstname"></td>
    <td> Last name:</td><td>  <input type="text" name="lastname"></td>
  </tr>
  <tr>
    <td> Location:</td><td> <input type="text" name="location"></td>
    <td> Report:</td><td> <select name="report">
                             <option value="Wind Damage" selected>Wind Damage</option>
                             <option value="Hail">Hail</option>
                             <option value="Flooding">Flooding</option>
                             <option value="Power Outage">Power Outage</option>
                             <option value="General">General</option>
                          </select>
    </td>
  </tr>
  <tr>
     <td> Description: </td><td colspan="4"> <textarea rows="5" cols="65" name="desc" onfocus="this.value=''">Enter report description</textarea></td>
  </tr>
  <tr>
     <td colspan="4" style="text-align:center;"><input type="submit" name="lsr-submit" value="Submit"></td>
  </tr>
</table>
</form>

Каждый раз, когда я нажимаю кнопку отправки, он перезаписывает существующий XML. Мне было интересно, как сохранить значения пользователей без перезаписи XML, и если файл уже существует, я хочу, чтобы он добавлял значения пользователя вверху существующего xml

Спасибо вам, ребята.


person user3242704    schedule 28.01.2014    source источник


Ответы (1)


Вместо того, чтобы каждый раз создавать новый файл XML, вы захотите загрузить существующий файл XML. Чтобы повторно использовать как можно больше вашего кода, используйте функцию чтения файлов SimpleXML:

// This file "test.xml" is pre-populated with your base XML:
// <?xml version="1.0" encoding="UTF-8"?><entrys></entrys>
$xml = simplexml_load_file('test.xml');

Нам нужно внести изменения в вашу схему; <entrys> должен быть массивным узлом из <entry> узлов. Правильный? Если это так, замените ваши текущие методы addChild, создав родительский узел для захвата имени, фамилии и т. д.:

$entry = $xml->addChild('entry');
$entry->addChild('fname', $fname);
$entry->addChild('lname', $lname);
$entry->addChild('location', $location);
$entry->addChild('report', $report);
$entry->addChild('description', $description);

Запустив это дважды, мы получим что-то вроде:

<?xml version="1.0" encoding="UTF-8"?>
<entrys>
  <entry>
    <fname>abc</fname>
    <lname>abc</lname>
    <location>abc</location>
    <report>abc</report>
    <description>abc</description>
  </entry>
  <entry>
    <fname>abc</fname>
    <lname>abc</lname>
    <location>abc</location>
    <report>abc</report>
    <description>abc</description>
  </entry>
</entrys>
person Jacob Budin    schedule 28.01.2014
comment
Но он не сохраняет данные в начале text2.xml. вместо этого он сохраняет его внизу .. я хочу, чтобы данные сохранялись в начале каждый раз, когда я их обновляю, спасибо - person user3242704; 30.01.2014