Anzeige:
Ergebnis 1 bis 2 von 2

Thema: SimpleXML speichert doppelt?

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.05.2005
    Beiträge
    23

    SimpleXML speichert doppelt?

    Hallo,

    ich schreibe eine kleine Datenbank für Teilnahme-Eingaben, und möchte in einer aktualisierten Variante auf SimpleXML umsteigen. Leider musste ich feststellen, dass das Abspeichern einen interessanten Nebeneffekt hat. Die XML-Datei selbst besitzt folgende Grundstruktur (der Fehler tritt allgemeiner auf als in meinem Originalposting, daher hier die einfachere Version, mit dem gleichen 'Defekt'):

    Code:
    <root>
       <item>
       <id>Nummer</id>
       <info1>...</info1>
       <info2>...</info2>
       /* usw. */
       </item>
    </root>
    Ziel des Skripts ist die Bearbeitung bzw. das Neuhinzufügen einzelner Einträge. Der Kerncode ist der folgende:
    $docu=simplexml_load_file('documentations.xml');

    Code:
    $docu=simplexml_load_file($filename);
    $d=$n?$docu->addChild('documentation'):getID($docu,$_GET['id']);
    $d->id=$id;
    $d->title=toXML($_GET['title']);
    // weitere Einträge
    saveChanges($docu,1);
    Zur Erklärung: Die Variable $n prüft nur ab, ob es ein neuer Eintrag werden soll oder nur ein alter bearbeitet wird. Im zweiten Fall sucht die Funktion getID aus dem mit simplexml_load_file geladenen XML-String das entsprechende Element heraus und liefert es zurück; saveChanges beinhaltet einfach nur die paar Zeilen, um $docu->asXML() in die Zieldatei abzuspeichern.

    Das Problem: Das Bearbeiten vorhandener Einträge funktioniert einwandtfrei, nur beim Hinzufügen neuer Einträge wird der Eintrag jedesmal doppelt abgespeichert.

    Interessanterweise funktioniert der folgende Code (ich hab die Routine mal in einer Testdatei neu geschrieben) fehlerfrei:
    Code:
    $xml=simplexml_load_file($filename);
    $d=$xml->addChild('documentation');
    $d->id=867486746;
    $d->title='Fixer neuer Titel';
    // weitere Einträge
    saveChanges($xml,1);
    Ich habe es auch ohne saveChanges und ohne getID versucht; keine Wirkung. Ich bin inzwischen echt ratlos, denn es kann doch nicht sein, dass der quasi selbe Code einmal funktioniert und einmal nicht?

    Hat nicht vielleicht doch jemand eine Idee für des Rätsels Lösung?

    Vielen Dank!
    Lg, maak
    Geändert von maak (22-01-2009 um 17:26 Uhr) Grund: Vereinfachte / Klarere Darstellung des Problems

  2. #2
    Registrierter Benutzer
    Registriert seit
    06.05.2005
    Beiträge
    23

    Question

    Hallo nochmals,

    ich habe den Fehler meines vorigen Postings inzwischen daraufhin zurückverfolgen können, dass PHP den gesamten Code dieser Seite definitiv zweimal abarbeitet (im Abstand von einer Millisekunde, sowahr man man time() hier trauen darf) -- dies erklärt zwar das doppelte Auftreten, macht aber den Fall eigentlich noch rätselhafter, denn der Grundcode der Seite sieht folgendermaßen aus:

    Code:
    <?
     @include('functions.php');
     // ein paar einfache Abfragen
     // Laden der XML-Datei
     // Neuer Unterknoten bzw. den zu bearbeitenden Knoten herausfischen
     // Neuerungen / Änderungen an das SimpleXML-Element übergeben
     // Abspeichern
     createSiteSkeleton('Bearbeitungsinformation');
    ?>
    <!-- etwas HTML-Code -->
    <? echo closeSite(); ?>
    Ansonsten ist nichts da; vor allem nichts, dass die Seite zweimal abgearbeitet werden würde ... ? Gibt es bei SimpleXML oder bei in Extra-Dateien ausgelagerten Funktionen für Speichern und Knotensuche irgendetwas (vielleicht auch PHP-internes), was ein doppeltes Abarbeiten bewirken kann?

    Lg, maak

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •