S3Ri0US: Chat mit PHP/ JavaScript ?

Guten morgen alle zusammen...

Ich habe gestern in mein Forum einen kleinen Chat/Shoutbox eingebaut.. welcher wie folgt funktioniert:

Nachricht absenden ... Nachricht wird in Datenbank eingetragen..  ChatFenster(iFrame) wird über JavaScript alle 10Sec aktualisiert.

Das ganze funktioniert zwar.. ist aber nicht wirklich schön, da man den Refresh alle 10 Sekunden sieht. Hat jemand eine Idee wie man das ganze anders lösen kann ?

Danke schon mal.

  1. Hallo!

    Hat jemand eine Idee wie man das ganze anders lösen kann ?

    Mit AJAX? Wenn du dich dafür entscheidest dann wäre folgendes für dich evtl. interessant: http://developer.mozilla.org/de/docs/AJAX:Getting_Started.

    ciao, ww

    --
    Spiderpig, Spiderpig,
    Does what ever a spiderpig does.
    Can he swing, from a web?
    No he cant, he's a pig.
    Look out, he is a spiderpig
    1. Naja leider kenn ich mich mit AJAX 0 aus...  Ich habe es jetzt über einen verstekcten iFrame gemacht.. geht auch wunderbar.. nur ein Problem ist da noch... Wenn er alle 10 Sek Aktualisiert.. haut er mir immer wieder alle  15 Nachrichten in die DIV... jetzt weiss ich auch nicht wirklich wie ich nur neue nachrichten welche noch nicht ausgegeben wurden anzeigen kann...

      <?PHP

      echo "<script type='text/javascript'>

      var cDocument;
      var cWindow;

      function init_content()
      {
       var chatContents = parent.document.getElementById("shoutbox");

      if(window.frames && window.frames["chatContents"])
            cWindow = window.frames["chatContents"];
          else if(chatContents.contentWindow)
            cWindow = chatContents.contentWindow;
          else
            cWindow = chatContents;

      if(cWindow.document)
            cDocument = cWindow.document;
          else
            cDocument = cWindow.contentDocument;";

      $abfrage = "SELECT id,datum,zeit,chatuser,text,userstatus FROM southbox ORDER by id DESC LIMIT 15";
          $erga = mysql_db_query("700fps_d",$abfrage,$verbindung);
          while (list($id,$datum,$zeit,$chatuser,$text,$userstatus) = mysql_fetch_row($erga))
          {

      if($mcolor=="1") {
                  $color="#555452";
              } else {
                  $color="#5d5c59";
              }

      if($userstatus=="Paymember") {
               $usercolor="#fff223";
              } else if($userstatus=="Admin") {
               $usercolor="#ff0000";
              } else if($userstatus=="Mod") {
               $usercolor="#bd0000";
              } else {
               $usercolor="#ffffff";
              }

      echo"
              var msg$id = "<table width='610' bgcolor='$color' class='style1' border='0'><tr><td width='120'>$datum $zeit</td><td width='90'><font color='$usercolor'>$chatuser:</font></td><td width='400'>$text</td></tr></table>";
              postText(msg$id);";

      if($mcolor=="1") {
                  $mcolor="0";
              } else {
                  $mcolor="1";
              }
          }
      echo "
      }

      function postText(text)
      {
          var newDiv = cDocument.createElement("DIV");
          newDiv.innerHTML = text;
          cDocument.getElementById("content").appendChild(newDiv);

      }

      </script>";

      Hallo!

      Hat jemand eine Idee wie man das ganze anders lösen kann ?

      Mit AJAX? Wenn du dich dafür entscheidest dann wäre folgendes für dich evtl. interessant: http://developer.mozilla.org/de/docs/AJAX:Getting_Started.

      ciao, ww

    2. Hallo,

      Mit AJAX? Wenn du dich dafür entscheidest dann wäre folgendes für dich evtl. interessant: http://developer.mozilla.org/de/docs/AJAX:Getting_Started.

      Auf http://www.galileocomputing.de gibts ein openbook für AJAX/Javascript, das sehr gut ist.

      MfG

      --
      How long? Not long! 'Cause what you reap, is what you sow!!!
      SELF forever
      Mein Selfcode: ie:% br:< fl:( va:) ls:< fo:} rl:( n4:~ de:> ss:} ch:| js:| mo:| sh:( zu:{
      1. Hallo!

        Auf http://www.galileocomputing.de gibts ein openbook für AJAX/Javascript, das sehr gut ist.

        Ich zitiere Mathias:
        "Aaaah, bitte nicht. Dieses Buch ist in vielerlei Hinsicht fehlerhaft und veraltet, daher mit Vorsicht zu genießen."

        ciao, Lukas

        --
        Nach einem Korrspondentenbericht der New York Times aus der umkämpften Stadt, wurden zur „Ausschaltung eines einzigen feindlichen Scharfschützen mehrere 500-Pfund-Bomben, 35 Artilleriegranaten des Kalibers 255, zehn Schüsse aus der Abrams-Panzerkanone sowie 30 000 Patronen leichter Munition benötigt”. „Die Gebäude waren daraufhin Ruinen”, schreibt die New York Times, „aber der Scharfschütze schoss weiter...”
  2. Hat jemand eine Idee wie man das ganze anders lösen kann ?

    im Prinzip JA, aber:
    Zuerst habe ich versucht die ganze Kommunikation mit dem Server in einen verdeckten Frame zu verlegen und das Chatfenster daraus mit JavaScript zu aktualisieren. Sah auch zuerst ganz toll aus, bis dann die Rechner abstuerzten - RAM verbraucht. D.h. in keiner Scriptsprache ist es moeglich den RAM real freizugebnen, also so, dass er von anderen Programmen genutzt werden kann. Okay, bei 2GB dauert es eine Weile, bis man den mit "Hallo Leute ..." und "Was geht denn hier ab ..." verbraucht hat, aber irgendwann ist es soweit.
    Dann bin ich darauf verfallen die Dateigroesse des Chatfensters zu minimieren, also fast nur Text mit minimalistischen HTML und eine zentrale CSS-Datei. Damit wurde das Flackern dann ertraeglich.

    HTH

    Gruss Norbert

  3. Ajax sehe ich auch als die beste Lösung an. Dann brauchst du auch keinen Iframe mehr und es geht schneller.

    Beispiel:
    < http://www.linuxuser.at/chat/index.html>

    Gruß!