Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Warnungsmeldung DOMDocument trotz PHP 5.5

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Warnungsmeldung DOMDocument trotz PHP 5.5

    Hallo,

    ich arbeite mich gerade ein bissl ins DOM mit PHP ein, in dem ich ein Tutorial durcharbeite. Jetzt kriege ich sone Warnmeldung:
    Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseStartTag: misplaced <body> tag in Entity, line: 29 in ..\test.php on line 16
    mein PHP code und die test.php ist:
    PHP-Code:
    <!DOCTYPE html>
    <html lang="de-DE">
    <head>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">


    </head>


    <?php
    $PageString 
    file_get_contents('test.php');

    $dom = new DOMDocument();
    $dom->loadHTML($PageString);


    $mango_div $dom->getElementById('mango');
     
    echo 
    $mango_div->nodeValue;
    ?>






      <body>
            <div id="mango">
                This is the mango div. It has some text and a form too.
                <form>
                    <input type="text" name="first_name" value="Yahoo" />
                    <input type="text" name="last_name" value="Bingo" />
                </form>
                 
                <table class="inner">
                    <tr><td>Happy</td><td>Sky</td></tr>
                </table>
            </div>
             
            <table id="data" class="outer">
                <tr><td>Happy</td><td>Sky</td></tr>
                <tr><td>Happy</td><td>Sky</td></tr>
                <tr><td>Happy</td><td>Sky</td></tr>
                <tr><td>Happy</td><td>Sky</td></tr>
                <tr><td>Happy</td><td>Sky</td></tr>
            </table>
        </body>
     



    </html>

    wieso soll hier der Body tag n.i.O sein?

  • #2
    file_get_contents holt sich ja den gesamten inhalt, in deiner test.php ist aber PHP code drin, zwischen body und head darf nichts stehen(da steht aktuell dein PHP Code drin)

    selbst wenn du da noch ein include machst , durch echo $mango_div->nodeValue; taucht ein text zwischen head und body auf, verschiebe das Ganze mal in den body
    apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

    Kommentar


    • #3
      hi BlackScorp,

      danke für den Tip. Egal wo ich den PHP Code reinpflanze, es heisst immer, dass dort wo ich den PHP code rein tue, der entsprechende html n.i.O sei. Frage: anstatt, dass ich den file_get_contents('test.php'); brauche, gibts nicht ne bessere Methode, wo ich z.B nur den ganzen <body> als String rauskopieren kann?

      Kommentar


      • #4
        wenn ich anstatt
        PHP-Code:
        $PageString file_get_contents('test.php');

        $dom = new DOMDocument();
        $dom->loadHTML($PageString); 


        das mache um die html page als string zu erhalten :
        PHP-Code:
        // a new dom object
        $dom = new domDocument;
         
        // load the html into the object
        $dom->loadHTML($html);
         
        // discard white space
        $dom->preserveWhiteSpace false
        kriege ich diese Meldung:
        Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Empty string supplied as input in ...\test.php on line 6
        wieso heisst es empty string?

        Kommentar


        • #5
          also ich habs ausprobiert und bekam keine fehlermeldung als ich den phpcode in den <body> tag eingetragen habe, du hast wohl es irgendwie falsch gemacht

          PHP-Code:
          <!DOCTYPE html>
          <html lang="de-DE">
          <head>

              <meta charset="utf-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">


          </head>

          <body>
          <?php
          $PageString 
          file_get_contents('test.php');

          $dom = new DOMDocument();
          $dom->loadHTML($PageString);


          $mango_div $dom->getElementById('mango');

          echo 
          $mango_div->nodeValue;
          ?>
          <div id="mango">
              This is the mango div. It has some text and a form too.
              <form>
                  <input type="text" name="first_name" value="Yahoo" />
                  <input type="text" name="last_name" value="Bingo" />
              </form>

              <table class="inner">
                  <tr><td>Happy</td><td>Sky</td></tr>
              </table>
          </div>

          <table id="data" class="outer">
              <tr><td>Happy</td><td>Sky</td></tr>
              <tr><td>Happy</td><td>Sky</td></tr>
              <tr><td>Happy</td><td>Sky</td></tr>
              <tr><td>Happy</td><td>Sky</td></tr>
              <tr><td>Happy</td><td>Sky</td></tr>
          </table>
          </body>
          funktioniert ohne probleme
          apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

          Kommentar


          • #6
            Zitat von IARC Beitrag anzeigen
            wieso heisst es empty string?
            kann man ganz einfach debuggen

            PHP-Code:
            var_dump($html);
            var_dump(empty($html));
            // load the html into the object
            $dom->loadHTML($html); 
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

            Kommentar


            • #7
              Blackscorp,

              ich danke Dir vielmals! Funktioniert jetzt sogar bei mir. Super, jetzt habe ich wieder was gelernt und komme auch weiter! Wünsche noch einen guten Tag.

              Kommentar


              • #8
                Wieso eigentlich HTML mit PHP-Code drin laden? Das ist im Grunde dann kein gültiges HTML. Mach doch einfach zwei Dateien. Eine mit Code, eine mit HTML.

                Kommentar


                • #9
                  ^^ ich muss per DOM eine Tabelle innerhalb einer PHP page auslesen, um daraus ein Array zu machen, das ich dann per PHP in die SQL schreibe und wüsste keinen anderen Weg zur Zeit. Es geht immer noch um die Thematik hier schlussendlich http://www.php.de/php-einsteiger/113...nfuegen-2.html

                  Kommentar


                  • #10
                    ich muss per DOM eine Tabelle innerhalb einer PHP page auslesen, um daraus ein Array zu machen, das ich dann per PHP in die SQL schreibe und wüsste keinen anderen Weg zur Zeit
                    Das erklärt aber nicht, warum der Code, der die Tabelle ausliest, in derselben Datei stehen muss wie die Tabelle.

                    Ich glaube, du verwechselst in hohem Maße Zuständigkeiten von Client und Server. PHP funktioniert nicht wie JavaScript. Das läuft serverseitig.

                    Am Ende suchst du vielleicht einfach nur Formulare, die du absenden und dann per PHP verarbeiten kannst.

                    Kommentar


                    • #11
                      das hab ich schon mitgekriegt, dass PHP auf dem Server läuft, aber was ist nicht i.O wenn ich den PHP code mit der entsprechenden Funktion nicht auf derselben PHP Page lasse, wo ich die ganze Verarbeitung von den Formularen mache? Sonst müsste ich ja extra diese Datei cachen oder speichern und wo anders reinladen und dort verarbeiten...

                      Kommentar


                      • #12
                        Ich weiß nicht genau, was du machen willst, ich kann dir nur sagen, dass das so bestimmt nicht richtig ist.

                        Du parst ja nicht den Inhalt irgendeiner ausgefüllten Seite, die jemand im Browser hatte. Du liest einfach die Quellcode-Datei ein, wie sie auf der Festplatte liegt. Das heißt, du könntest alles, was du da an Daten rausziehst, auch hardcoden, weil die sich nie dynamisch ändern werden.

                        (Falls das doch einen Sinn hat, müsste mir den bitte noch mal jemand erklären.)

                        Kommentar


                        • #13
                          ^^
                          ich parse eine dynamische Formulartabelle, wo der Benutzer variabel Rows löschen und erstellen kann und ggf. mit neuen Daten abfüllt. Natürlich wäre ich froh, wenn es da eine einfachere Lösung gibt. wäre schön, wenn ich die dynamische Formulartabelle einfach als Array POSTen könnte. Ich habe eben noch andere Eingabefelder auf dieser PHP-Seite, die ich einfach normal POSTen kann, wo man nichts dynamisch löschen oder hinzufügen können muss. Es ist ein einfaches CMS sozusagen. hier der Link zum ursprünglichen Thread http://www.php.de/php-einsteiger/113...nfuegen-2.html

                          Kommentar


                          • #14
                            Das funktioniert so nicht. Du kommst nicht per PHP an eine individuell pro Nutzer im Client durch JS veränderte HTML-Seite.

                            Was du per PHP ausliest, ist der Quellcode von test.php auf dem Server. An dem ändert sich nichts.

                            Du musst die Daten per JavaScript sammeln und dann an das PHP-Script senden. Ich glaube, das ist auch das, was dir strub hier als Ansatz gebastelt hat:

                            - http://www.php.de/833332-post9.html

                            Kommentar


                            • #15
                              Hallo Mermshaus,

                              hmm, ich habe hier diesen Code gebastelt und das hat funktioniert, aber ich müsste nun die ganze Sache triggern mit einer zzgl. Funktion
                              PHP-Code:
                              <?php
                              $html 
                              file_get_contents('test.php');
                              $dom = new DOMDocument();
                              $dom->loadHTML($html);

                              $tables $dom->getElementsByTagName('input'); 
                              $i 0;

                              $tablearray = array();
                               
                              while(
                              $table $tables->item($i++))
                              {
                                  
                              $class_node $table->attributes->getNamedItem('name');

                                  if(
                              $class_node->value == "txt")
                                  {
                                      
                              $inputvalue $table->attributes->getNamedItem('value');
                                      
                              $tablearray[$i] = $inputvalue->value;
                                  }
                              }

                              print_r(array_values($tablearray));

                              ?>
                              der Example-Code von Strub hat nicht so recht funktioniert. Aber ich habe hier ein tolles Tutorial gefunden:
                              http://www.fourfront.us/blog/store-h...vascript-array

                              Kommentar

                              Lädt...
                              X