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

  • IARC
    hat ein Thema erstellt [Erledigt] Warnungsmeldung DOMDocument trotz PHP 5.5.

    [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?

  • IARC
    antwortet
    ^^ danke für Deine Antwort

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    Genau. Nutzereingaben auf Webseiten oder auch das Hinzufügen und Entfernen von Elementen via JavaScript passieren erst mal ausschließlich im Browser des Nutzers. (Der Browser hält intern die DOM-Struktur der Seite bereit und modifiziert diese lokal in seinem Arbeitsspeicher, wenn man so will.)

    Damit der Server (und damit auch deine PHP-Software) davon etwas mitbekommt, muss irgendwas an ihn geschickt werden.

    Das kann einmal über klassische HTML-Formulare geschehen, die „die Seite abschicken“. Da geht dann beim Server ein entsprechender GET- oder POST-Request mit den Formulardaten ein, der Server generiert eine HTML-Response, die dann im Browser angezeigt wird, wobei die vorherige Seite komplett ersetzt wird. (Harter Reload.) Das dürfte ja bekannt sein. Wenn du hier einen Beitrag abschickst, passiert das etwa.

    Dann gibt es noch die Option, ohne so einen harten Reload mit dem Server zu kommunizieren. Das nennt sich gemeinhin AJAX (mit HTML5 gibt es da noch mindestens Sockets, aber das ist noch mal eine andere Geschichte). Dabei werden per JavaScript im Hintergrund Daten mit dem Server ausgetauscht, die dann etwa auch DOM-Teile ersetzen können, wodurch sich dann an der Darstellung im Browser dynamisch etwas ändert, ohne dass die Seite insgesamt neu geladen werden muss.

    Ein Beispiel dafür sind die Suchbegriff-Vorschläge bei Google. Sobald du ein Zeichen tippst, schickt Google deine bisherige Eingabe an einen Server, der dann Vorschläge liefert, die ins Interface eingebunden werden.

    Ich glaube aber nicht, dass du einen AJAX-Ansatz benötigst.

    Du brauchst ein Formular (form-Element), dem du dynamisch per JavaScript input-Elemente (in Form von Tabellenzeilen oder wie auch immer) hinzufügst. Da die neu hinzugefügten Elemente Teil des Formulars sind, werden die ganz automatisch beim Abschicken des Formulars mitgesendet.

    Einen Kommentar schreiben:


  • IARC
    antwortet
    das würde bedeuten, dass wenn ich etwas in eine input-box schreibe, der generierte String nicht im Quellcode enthalten ist?

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    Du kommst auf diese Weise nicht an Daten, die ein Anwender dynamisch per JS hinzufügt. Du kommst nur an die Daten, die schon im Quellcode von test.php auf dem Server stehen.

    Das ist in etwa so, als würdest du vielleicht bei einer Bank oder einer Krankenkasse arbeiten und per Post ein Formular an die Kunden verschicken, dass sie ausgefüllt zurücksenden sollen. Statt aber die ausgefüllten Formulare auszuwerten, suchst du dir den unausgefüllten Vordruck, wie er an den Kunden rausgegangen ist, und willst den auswerten.

    Einen Kommentar schreiben:


  • IARC
    antwortet
    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

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    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

    Einen Kommentar schreiben:


  • IARC
    antwortet
    ^^
    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

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    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.)

    Einen Kommentar schreiben:


  • IARC
    antwortet
    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...

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    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.

    Einen Kommentar schreiben:


  • IARC
    antwortet
    ^^ 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

    Einen Kommentar schreiben:


  • mermshaus
    antwortet
    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.

    Einen Kommentar schreiben:


  • IARC
    antwortet
    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.

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    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); 

    Einen Kommentar schreiben:

Lädt...
X