Skript: XML Datei in PHP editieren

FritzTheCat

Grünschnabel
Servus!

Ich poste euch hier mal mein Skript zum editieren einer XML-Datei in PHP (basierend auf dem Tutorial http://www.phpforum.de/forum/showthread.php?t=162296).

Hier die XML Datei:
HTML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<config>
 <section>
  <id>general</id>
  <site_name>Testseite</site_name>
  <surname>Mustermann</surname>
  <forename>Max</forename>
  <email>max.mustermann@mail.de</email>
 </section>
</config>
Es können beliebig viele "section"s angelegt werden, das Tag <id> beschreibt den Abschnitt.

Hier die PHP Datei:
PHP:
<?php 
 error_reporting (E_ALL);
 
 $doc = DOMDocument::load("../config/config.xml"); 
 $xp = new domxpath($doc); 
 # dieser array beinhaltet die sections der XML-Datei
 $sections = array ("general", "interface", "tables");
 
 if ($_POST) {
  $section = $_POST["section"];
 
  foreach ($_POST as $key => $value) {
   if ($key != "section") {
    $edit = $key;
    $newtag = $doc->createElement("$key"); 
    $newtag_content = $doc->createTextNode($value); 
        $newtag->appendChild($newtag_content); 
 
        $titles = $xp->query('section[id="' . $section . '"]'); 
    foreach ($titles as $node) { 
        foreach($node->childNodes as $cnode) { 
            if($cnode->nodeType == 1) { 
                if($cnode->nodeName == $edit) { 
                    $cnode->parentNode->replaceChild($newtag, $cnode); 
                } 
            } 
        } 
    } 
   }
  }
  $doc->save("../config/config.xml");
  print "saved...<br><br><a href=\"index.php\">back</a>";
  exit (0);
 }
 
 foreach ($sections as $section) {
  print "<form action=\"\" method=\"POST\">";
  print "<table><tr><th colspan=\"2\">$section</th></tr>";
  $titles = $xp->query('section[id="' . $section . '"]'); 
  foreach ($titles as $node) { 
      foreach($node->childNodes as $cnode) { 
          if($cnode->nodeType == 1) { 
              if ($cnode->nodeName != "id") {
               print "<tr><td>" . $cnode->nodeName . "</td><td><input type=\"text\" value=\"" . $cnode->textContent . "\" name=\"" . $cnode->nodeName . "\"></td></tr>"; 
              }
          } 
      } 
  }
  print "<tr><td></td><td><input type=\"submit\" value=\" invoke \"></td></tr></table>";
  print "<input type=\"hidden\" name=\"section\" value=\"$section\">";
  print "</form>";
 }
 
 
?>

Der array $sections beinhaltet die Inhalte der <id> Tags.

Vielleicht kann das ja der ein oder andere brauchen.

Zu beachten ist, dass der Internet User Schreibrechte auf die xml-datei hat.

Gruß
Alex
 

Neue Beiträge

Zurück