Felix Riesterer: Update einer Chatfunktion

Beitrag lesen

Lieber j4nk3y,

Krass... Ich hab nix verstanden.

man kann in PHP auf zwei Arten HTML-Code erzeugen und an den Browser ausgeben:

1.) String-basiert

$html = '<!doctype html><html><head><title>Meine Seite</title></head><body>';

$html .= '<h1>Willkommen auf meiner Seite!</h1>';
$html .= '<p>Vielleicht haben Sie ja Lust sich ein wenig umzuschauen?</p>';
$html .= '</body></html>';

echo $html;

Das kann man mit verschiedenen Schreibweisen tun, unter anderem die heredoc-Schreibweise, aber im Grunde beschränkt man sich auf Stringoperationen, indem man den HTML-Code als Zeichenkette Stück für Stück zusammensetzt.

P.s. Das ist nur eine Info, dass muss nicht kommentiert werden^^

Warum sollte ich Dir keinen Ausblick auf das geben, wie Du vielleicht später einmal Deine Dokumente zusammen baust? Vielleicht mit einer DOM-Klasse?

2.) Man erstellt eine Datenstruktur, die die Dokumentstruktur abbildet, das sogenannte Document Object Model (DOM). Nicht nur JavaScript im Browser, sondern auch PHP auf dem Server kann das. Der Vorteil ist, dass man sich um die syntaktische Richtigkeit des endgültigen HTML-Codes (lies: Schreibfehler oder fehlende Tags) keine Gedanken mehr machen muss, da das die Klasse übernimmt.

$doc = new DOMDocument('1.0', 'UTF-8');
$doc->preserveWhiteSpace = false;
$doc->formatOutput = true;

$doc->loadHTML(
    '<!doctype html><html><head><title>Meine Seite</title></head><body></body></html>'
);

$body = $doc->getElementsByTagName('body')->item(0);

$h1 = $doc->createElement(
    'h1',
    'Willkommen auf meiner Seite!'
);

$p = $doc->createElement(
    'p',
    'Vielleicht haben Sie ja Lust sich ein wenig umzuschauen?'
);

$body->appendChild($h1);
$body->appendChild($p);

echo $doc->saveHTML();

Es gibt eine PHP-Erweiterung namens Tidy, deren Sinn es ist den HTML-Code zu säubern und leserlich zu layouten. Wenn man nach der Methode 1 (String-basiert) seinen HTML-Code zusammenbaut, kann Tidy Fehler reparieren, bevor der Code an den Browser geht. Verwendet man aber gemäß Methode 2 eine DOM-Klasse, braucht man anschließend kein Tidy mehr, da der Ergebniscode garantiert korrekt ist (es sei denn die DOM-Klasse ist kaputt).

Wenn ich in meinen Projekten echte (lies: formal vollständige) HTML-Dokumente als Templates (lies: Vorlagen) benutze, dann verwende ich in der DOM-Klasse die Möglichkeiten, gezielt nach ID oder Elementarten zu suchen, um Inhalte hineinzubasteln:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Einstellungen</title>
    </head>
    <body>
        ...
        <form>
            ...
            <label for="lang">{#language}</label>
            <select id="lang" name="lang"></select>
            ...
        </form>
        ...
    </body>
</html>

Da mehrere Sprachen unterstützt werden sollen, steht im Dokument ein Platzhalter "{#language}", der je nach Benutzerspracheinstellung mit z.B. "Language" oder "Sprache" befüllt wird. Die verfügbaren Sprachen müssen jetzt als <option>-Elemente in das <select> eingefügt werden. Da sind String-Operationen nicht mehr so leicht, wenn auch nicht unmöglich, mit der DOM-Klasse ist das Ergebnis sicherer:

$select = $doc->getElementById('lang');

if ($select) {
    foreach ($available_languages as $l) {
        $option = $doc->createElement('option', $l);
        $option->setAttribute('value', $l);
        $select->appendChild($option);
    }
}

Wollte ich diesen Vorgang mit einer String-Operation tun, wäre das zwar auch möglich, aber deutlich schwerer zu lesen. Wenn es nur ein <select> im Dokument gibt, ist es etwas einfacher, als wenn es verschiedene davon gibt. Mit der DOM-Klasse weiß ich aber genau, was ich tue und kann mir sicher sein, dass der finale HTML-Code keine technischen Störungen haben wird - von fehlerhaft dargestellten Umlauten vielleicht einmal abgesehen.

Liebe Grüße,

Felix Riesterer.

0 151

Update einer Chatfunktion

j4nk3y
  • html
  • javascript
  • php
  1. 2
    Felix Riesterer
    • datenbank
    • php
    • sicherheit
    1. 0
      j4nk3y
      1. 0
        Gunnar Bittersmann
    2. 0
      Gunnar Bittersmann
      1. 0
        Matthias Apsel
        1. 0
          Gunnar Bittersmann
      2. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
      3. 0
        Felix Riesterer
        1. 0
          j4nk3y
          • zur info
          1. 1
            Felix Riesterer
            • php
            • programmiertechnik
            • zur info
            1. 0
              j4nk3y
        2. 0
          Gunnar Bittersmann
    3. 0
      j4nk3y
      1. 0
        Felix Riesterer
        • php
        • programmiertechnik
        • sicherheit
        1. 0
          j4nk3y
          1. 0
            Der Martin
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
          2. 0
            Felix Riesterer
            1. 0
              j4nk3y
              1. 0
                Der Martin
                1. 0
                  j4nk3y
              2. 1
                dedlfix
                1. 0
                  Gunnar Bittersmann
                  • typografie
                2. 0
                  j4nk3y
                  1. 0
                    dedlfix
                    1. 0
                      j4nk3y
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            dedlfix
                            1. 0
                              j4nk3y
                              1. 0
                                Der Martin
                                1. 0
                                  j4nk3y
                                  1. 0
                                    Der Martin
                              2. 1
                                dedlfix
                                1. 0
                                  Der Martin
                              3. 0
                                Gunnar Bittersmann
                                • datenbank
                                • programmiertechnik
                                1. 0
                                  j4nk3y
        2. 0
          Der Martin
        3. 0
          Gunnar Bittersmann
          • internationalisierung
          • php
          1. 0
            Felix Riesterer
            1. 0
              Tabellenkalk
              • zitat
              • zu diesem forum
              1. 1
                Matthias Apsel
    4. 0
      1unitedpower
      1. 1
        dedlfix
        1. 1
          1unitedpower
          1. 0
            Christian Kruse
          2. 0
            dedlfix
            1. 0
              1unitedpower
              1. 0
                dedlfix
                1. 0
                  Christian Kruse
                  1. 0
                    dedlfix
                  2. 0
                    1unitedpower
                    1. 0
                      Christian Kruse
                      1. 0
                        1unitedpower
                    2. 0
                      dedlfix
                      1. 0
                        1unitedpower
                        1. 0
                          dedlfix
  2. 0
    j4nk3y
    1. 0
      Gunnar Bittersmann
      • html
      1. 0
        j4nk3y
        1. 0
          Gunnar Bittersmann
          1. 0
            j4nk3y
            1. 0
              Matthias Apsel
              1. 0
                j4nk3y
  3. 0
    j4nk3y
  4. 0
    pl
    1. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            dedlfix
            1. 0
              j4nk3y
              1. 0
                pl
                1. 0
                  j4nk3y
                  1. 0
                    pl
                    1. 0
                      dedlfix
                      1. -2
                        pl
                        1. 0
                          Matthias Apsel
                  2. 0
                    pl
              2. 0
                dedlfix
                1. 0
                  j4nk3y
                  1. 0
                    dedlfix
            2. 0
              j4nk3y
              1. 0
                dedlfix
      2. 0
        pl
  5. 0
    j4nk3y
    1. 0
      dedlfix
    2. 0
      j4nk3y
      1. 0
        j4nk3y
        1. 0
          pl
        2. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              dedlfix
              1. 0
                j4nk3y
          2. 0
            j4nk3y
            1. 0
              j4nk3y
  6. 0
    j4nk3y
    1. 0
      Der Martin
      1. 0
        j4nk3y
        1. 0
          dedlfix
          1. 0
            j4nk3y
            1. 0
              Der Martin
              1. 0
                j4nk3y
        2. 0
          Der Martin
          1. 0
            j4nk3y
            1. 1
              Felix Riesterer
              1. 0
                j4nk3y
                1. 0
                  Matthias Apsel
                  1. 0
                    j4nk3y
                    • menschelei
                2. 0
                  Felix Riesterer
                  • php
                  • programmiertechnik
                  • sql
                  1. 0
                    j4nk3y
                    1. 0
                      Der Martin
                      1. 0
                        j4nk3y
                        1. 0
                          Der Martin
                          1. 0
                            j4nk3y
                            • menschelei
                    2. 0
                      Felix Riesterer
                      1. 0
                        pl
                      2. 0
                        j4nk3y
                        1. 2
                          dedlfix
                          1. 0
                            j4nk3y
                            1. 0
                              dedlfix
                              1. 0
                                Christian Kruse
                                1. 1
                                  dedlfix
                  2. 0
                    j4nk3y
                  3. 0
                    j4nk3y
                    1. 0
                      Felix Riesterer
                      1. 0
                        dedlfix
                        1. 0
                          j4nk3y
                          1. 0
                            pl
                            1. 0
                              j4nk3y
                          2. 0
                            dedlfix
                      2. 0
                        j4nk3y
                        1. 0
                          Der Martin
                        2. 0
                          Felix Riesterer
                          1. 0
                            Der Martin
                            1. 0
                              dedlfix
                          2. 0
                            j4nk3y
                            1. 1
                              Der Martin
                              1. 0
                                j4nk3y
    2. 0
      j4nk3y
      1. 0
        dedlfix
        1. 0
          j4nk3y
          1. 0
            Christian Kruse
            1. 0
              j4nk3y
              1. 0
                Christian Kruse
              2. 0
                Matthias Apsel
                • zu diesem forum
                1. 0
                  j4nk3y