SimpleXML->asXML() Problem!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SimpleXML->asXML() Problem!

    ich betreibe mein gästebuch mit xml und verwende dafür SimpleXML.

    Das Lesen funktioniert. Das Schreiben geht nicht.

    Sobald ich mit asXML() speichern will kommt der Fehler:

    Fatal error: Cannot access empty property in (Path/to/dir)/guestbook.php on line 36

    hier die guestbook.php mit der engine klasse
    PHP-Code:
    class GuestbookEngine {
        var 
    $oXml null;
        function 
    isNull() {
            return (
    $this->oXml == null);
        }
        
        function 
    GuestbookEngine($file) {
            
    $this->oXml simplexml_load_file($file);
        }
        
        function 
    getAllEntries() {
            return 
    $this->oXml->xpath("/guestbook/entry");
        }
        
        function 
    getEntriesWithName($name) {
            
    $results = array();
            foreach(
    $this->getAllEntries() as $entry) {
                if(
    $entry["name"] == $name) {
                    
    $results[] = $entry;
                }
            }
            return 
    $results;
        }
        
        function 
    getEntryCount() {
            return 
    count($this->getAllEntries());
        }
        function 
    addEntry($name,$time,$text) {
            
    $child $this->oXml->addChild('entry');
            
    $child->addChild('name','<![CDATA['.$name.']]>');
            
    $child->addChild('time',$time);
            
    $child->addChild('text','<![CDATA['.$text.']]>');
        }
        function 
    saveAsFile($file) {
            
    $this->$oXml->asXML($file); // <--- Zeile 36
        
    }

    Was mache ich falsch oder was muss ich ändern?
    Zuletzt geändert von madmaurice; 12.01.2007, 10:08.

  • #2
    Re: SimpleXML-&gt;asXML() Problem!

    Original geschrieben von madmaurice
    Was mache ich falsch
    Du sagst nicht, welche Zeile Zeile 36 ist ...

    Und du hast offenbar keinerlei eigenes Debugging betrieben, bspw. das aktuell verwendete Objekt mal mittels print_r oder var_dump untersucht ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      wie wird die klasse verewendet?

      Kommentar


      • #4
        [nicht beachten]

        Habn fehler gemacht und den post 2 abgeschickt]
        Zuletzt geändert von madmaurice; 11.01.2007, 23:07.

        Kommentar


        • #5
          @ wahsaga ich sage sehr wohl wo die zeile 36 (siehe kommentar)

          warum sollte ich meine klasse mit var_dump ausgeben ich kenn sie doch

          @ Tobiaz
          Beispielcode:
          PHP-Code:
          $gbook = new GuestbookEngine("path");
          foreach(
          $gbook->getAllEntries() as $entry) {
           echo 
          "Name des Authors: ".$entry->name." <br>";
           echo 
          "Zeit: ".date("d.M.Y H:i",$entry->timestamp)."<br>";
           echo 
          "Text: ".nl2br($entry->text)."<hr>";

          Beispiel XML-Datei
          Code:
          <?xml version="1.0"?>
          <guestbook>
                  <entry>
                         <name>derlol</name>
                         <timestamp>174937243</timestamp>
                         <text><![CDATA[ Tja so geht dat nummal]]></text>
                  </entry>
          </guestbook>
          von mir aus kopier sie dir und änder sie ab

          Kommentar


          • #6
            Original geschrieben von madmaurice
            warum sollte ich meine klasse mit var_dump ausgeben ich kenn sie doch
            Nicht Klasse, sondern Objekt - du kennst den Unterschied?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              klar

              object <- instanceof <- klasse

              aber warum sollte ich

              Kommentar


              • #8
                Original geschrieben von madmaurice
                aber warum sollte ich
                Weil du vielleicht hier einen Thread eröffnet hast, weil du ein Problem lösen (lassen) willst ...?

                Aber hey, aber auf diesen wiederholten "warum sollte ich irgendwelche Vorschläge befolgen"-Blödsinn habe ich keinen Bock - also sieh doch zu, wie du's alleine löst.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Hast du dir mal angeschaut was die Ausgabe von var_dump überhaupt bringt?
                  Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                  var_dump(), print_r(), debug_backtrace und echo.
                  Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                  Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                  Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                  Kommentar


                  • #10
                    bidde ein var_dump und was hat mir das jetzt gebracht?

                    object(GuestbookEngine)#1 (1) {
                    ["oXml"]=> object(SimpleXMLElement)#2 (1) {
                    ["entry"]=> object(SimpleXMLElement)#3 (3) {
                    ["name"]=> string(3) "ich"
                    ["timestamp"]=> string(10) "1161177241"
                    ["text"]=> object(SimpleXMLElement)#4 (0) { }
                    }
                    }
                    }


                    @wahsaga

                    ein var_damp bringt nur die eigenschaften
                    asXML is ne function also bringt mir ein var_damp im endeffekt gar nichts

                    OffTopic:
                    @all Hats euch jetzt die Sprache verschlagen?

                    ok vll war ich dochn bissi hitzköpfisch

                    mann, ich brauch eure hilfe
                    Zuletzt geändert von madmaurice; 11.01.2007, 23:34.

                    Kommentar


                    • #11
                      Original geschrieben von madmaurice
                      bidde ein var_dump und was hat mir das jetzt gebracht?
                      Dass ich dir die Lösung für dein Problem sagen kann ...

                      object(GuestbookEngine)#1 (1) {
                      ["oXml"]=> object(SimpleXMLElement)#2 (1) {
                      OK, dein Objekt $gbook vom Typ GuestbookEngine hat also eine Eigenschaft namens oXml.

                      Worauf versuchst du zuzugreifen?
                      PHP-Code:
                      $this->$oXml->asXML($file); 
                      Auf eine Eigenschaft, deren Name sich bei dieser Syntax in einer Variablen namens $oXml befinden müsste.
                      Variable existiert nicht, also kein Eigenschaftname - also versuchst du dort eine "empty property zu accessen" ...

                      Was du an der Stelle schreiben wolltest, ist natürlich
                      PHP-Code:
                      $this->oXml->asXML($file); 
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        ups, hab ich übersehen.

                        sorry an alle die ich mit meinem problem genervt hab

                        Kommentar


                        • #13
                          Für alle, die sich die fertige klasse kopieren wolln:
                          PHP-Code:
                          <?
                          class GuestbookEngine {
                              var $oXml = null;
                              function isNull() {
                                  return ($this->oXml == null);
                              }
                              
                              function GuestbookEngine($file) {
                                  $this->oXml = simplexml_load_file($file);
                              }
                              
                              function getAllEntries() {
                                  return $this->oXml->xpath("/guestbook/entry");
                              }
                              
                              function getEntriesWithName($name) {
                                  $results = array();
                                  foreach($this->getAllEntries() as $entry) {
                                      if($entry["name"] == $name) {
                                          $results[] = $entry;
                                      }
                                  }
                                  return $results;
                              }
                              
                              function getEntryCount() {
                                  return count($this->getAllEntries());
                              }
                              function addEntry($name,$time,$text) {
                                  $child = $this->oXml->addChild('entry');
                                  $child->addChild('name',$name);
                                  $child->addChild('time',$time);
                                  $child->addChild('text',$text);
                              }
                              function save($file) {
                                  $this->oXml->asXML($file);
                              }
                          }
                          ?>
                          passendes beispiel steht weiter oben

                          Kommentar

                          Lädt...
                          X