j4nk3y: Update einer Chatfunktion

Beitrag lesen

Lieber Felix Riesterer,

Ersteinmal danke, dass du dir hier die Mühe gemacht hast!

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;

Markup soll doch nicht mit echo ausgegeben werden, hab ich jedenfalls irgendwo mal gelsesen.

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?

Man verzeihe mir aber ich bin noch lange nicht soweit, dass ich mit DOM-Klassen meine Seiten baue. Sehe darin auch für den Moment keine Notwendigkeit.

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.

Das ist mit Sicherheit wirklich hilfreich. Aber warum sollte ich meine Fehler vorallem vor mir verstecken? Ich denke da an nicht geschloßene Tags, wenn das irgendwo auftaucht, sehe ich in der Ausgabe einen Fehler und suche daraufhin nach der Ursache und schließe das Tag. Oder eben ähnliches, wenn etwas nicht funktioniert, jedenfalls nicht so wie es Gedacht ist, dann geht man eben auf Fehlersuche.

$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();

Ich sehe wohl einige Vorteile aber ich bin mit dem herkömmlichen Weg bis jetzt ganz zufrieden. Sprich neue PHP Datei erstellen und eine Seitenstruktur aufbauen so wie sie mir in Gedanken vorschwebt, sodass das Layout herauskommt was ich haben möchte.

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:

Also wenn ich etwas hinzufügen möchte mach ich die Datei auf und schreibe etwas rein. Da muss ich keiner DOM-Klasse sagen: "Such etwas und füge etwas hinzu".

<!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);
    }
}

Text für jede Sprache kommt aus der Datenbank oder einer includierten Datei. Verstehe nicht ganz was hier der Zweck oder das Ergebnis ist.

Alles in allem würde ich gern abschließend noch einmal erwähnen. Es wäre vermessen zu sagen, dass ich weiterführende Kenntnisse in Webprogrammierung habe. Daher darf und bin ich diesen Gedanken und Tipps nicht von vornherein abgeneigt. Es ist allerdings so, dass man für sein (gefühltes und erhofftes) "ergebnis orientiertes Hobby" nicht alles braucht was einem jegliche Programiersprache zur verfügung stellt, geschweige denn die kombination aus vielen. (Ich meine ich habe einen Freund der macht viele Web Projekte in Phyton und kombiniert das mit jquery und ich verstehe nichts mehr wenn er mir verucht irgendwas nahe zu legen von dem er weiss, dass es für mich Sachen vereinfachen würde. Aber er ist eben auch studierter informatiker und ich nicht.)

Es tut mir wirklich außerordentlich Leid wenn ich sagen muss, dass ich jedenfalls für den Moment befürchte, dass dieser wirklich hervorragende Erklärungsversuch leider gerade für mich keinen Sinn hat. Aber wenn ich irgendwann einmal erkennen sollte, welch hervorrangende möglichkeiten mir die DOM-Klasse hätte gebracht, dann erinnere ich mich hieran und werde das ganze nocheinmal aufrollen und versuchen nachzuvollziehen.

Grüße, Jo

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