N4ta nata
N4ta nata

Reputation: 181

How to update xml file using PHP?

I have xml file like this --> examples.xml

<?xml version="1.0" encoding="UTF-8"?>
<inventors>
 <person>
 <name>anie</name>
 <comment>good</comment>
 </person>
</inventors>

This is my php file --> index.php

<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<?php
 $xml = new DOMDocument('1.0', 'utf-8');
 $xml->formatOutput = true;
 $xml->preserveWhiteSpace = false;
 $xml->load('examples.xml');

 //Get item Element
 $element = $xml->getElementsByTagName('person')->item(0);

 //Load child elements
 $name = $element->getElementsByTagName('name')->item(0);
 $comment = $element->getElementsByTagName('comment')->item(0);

 //Replace old elements with new
 $element->replaceChild($name, $name);
 $element->replaceChild($comment, $comment);
 ?>

 <form method="POST" action=''>
  name <input type="text-name" value="<?php echo $name->nodeValue  ?>" name="namanya" />
comment  <input type="text-comment" value="<?php echo $comment->nodeValue  ?>"  name="commentnya"/>
 <input name="submit" type="submit" />
 </form>

 <?php


 if (isset($_POST['submit'])) 
 { 
$name->nodeValue = $_POST['namanya'];
$comment->nodeValue = $_POST['commentnya'];
htmlentities($xml->save('examples.xml'));

 }


 ?>

it cant be work if i click button submit, on browser view have 2 result input. if i click button submit, i want result is new input.

Upvotes: 2

Views: 17917

Answers (1)

KNaito
KNaito

Reputation: 3962

Your program shows the form firstly, then saves data secondly. So when you click button submit, the program shows the form with previous data first and then, saves 'new' data.

Therefore following code works well.

 <script src="http://code.jquery.com/jquery-latest.min.js"></script>
 <?php
 $xml = new DOMDocument('1.0', 'utf-8');
 $xml->formatOutput = true; 
 $xml->preserveWhiteSpace = false;
 $xml->load('examples.xml');

 //Get item Element
 $element = $xml->getElementsByTagName('person')->item(0);  

 //Load child elements
 $name = $element->getElementsByTagName('name')->item(0);
 $comment = $element->getElementsByTagName('comment')->item(0) ;

 //Replace old elements with new
 $element->replaceChild($name, $name);
 $element->replaceChild($comment, $comment);
 ?>

 <?php
 if (isset($_POST['submit']))
 {
$name->nodeValue = $_POST['namanya'];
$comment->nodeValue = $_POST['commentnya'];
htmlentities($xml->save('examples.xml'));

 }

 ?>

 <form method="POST" action=''>
  name <input type="text-name" value="<?php echo $name->nodeValue  ?>" name="namanya" />
comment  <input type="text-comment" value="<?php echo $comment->nodeValue  ?>"  name="commentnya"/>
 <input name="submit" type="submit" />
 </form>

Upvotes: 5

Related Questions