Matze: Live-Statistik-DB-Abfrage

Hallo und Guten Morgen!

Ich habe eine MySQL-Tabelle in der jede Minute ein neuer Datensatz mit statistisch-relevanten Daten eingefügt wird.

Zur Darstellung über HTML soll immer nur der aktuellste Datensatz angezeigt werden. Dazu muss ich also jede Minute eine Datenbankabfrage durchführen.

Meine erste Idee war jetzt ein Meta-Refresh aller 60 Sekunden, dass gefällt mir aber überhaupt nicht weil da auch der Rest der Seite neu geladen wird, dann fiel mir noch ein iframe ein, was ich aber auch für unschön halte also werde ich wohl JavaScript bemühen müssen.

Das JS nicht immer aktiviert ist, fällt in anbetracht der Relevanz der Daten und der Zielgruppe nicht ins Gewicht.

Ja, leider fehlt mir aber komplett der Ansatz wie ich da jetzt vor gehen müsste.

Könnte mir vielleicht jemand helfend zur Seite stehn? :)

Danke und Grüße, Matze

  1. Hallo,

    Zur Darstellung über HTML soll immer nur der aktuellste Datensatz angezeigt werden. Dazu muss ich also jede Minute eine Datenbankabfrage durchführen.

    [...] also werde ich wohl JavaScript bemühen müssen.

    Ja, leider fehlt mir aber komplett der Ansatz wie ich da jetzt vor gehen müsste.

    ist Dir der Begriff AJAX wirklich noch nicht über den Weg gelaufen? Die Forumssuche spuckt jetzt schon für 2008 über 1500 Treffer aus.

    Verwunderte Grüße

    Vinzenz

    1. Hallo Vinzenz!

      Ja, leider fehlt mir aber komplett der Ansatz wie ich da jetzt vor gehen müsste.

      ist Dir der Begriff AJAX wirklich noch nicht über den Weg gelaufen? Die Forumssuche spuckt jetzt schon für 2008 über 1500 Treffer aus.

      Sicher hab ich von AJAX gehört, hab aber absolut keine Ahnung wie es umgesetzt wird. Und du meinst 1500 Treffer behandeln speziell mein Problem?

      Den einzigen Ansatz den ich habe ist

        
      <script type="text/javascript">  // logisch  
      return = false;  // um den Seitenreload zu verhindern (hab ich noch irgendwie im Gedächtnis)  
      </script>  // logisch  
      
      

      Wie man sieht nicht viel.

      Das häufigste was ich in den Beiträgen lese ist sowas wie "nimm AJAX", aber nicht wie das überhaupt funktioniert.
      Das Problem wenn ich jetzt Google bemühe und mir ein fertiges Script besorge ist, dass ich danach so klug bin wie jetzt, nur dass ich mich mit meinem Problem nicht mehr beschäftigen muss.

      Grüße, Matze

      1. Hallo,

        Ja, leider fehlt mir aber komplett der Ansatz wie ich da jetzt vor gehen müsste.

        ist Dir der Begriff AJAX wirklich noch nicht über den Weg gelaufen? Die Forumssuche spuckt jetzt schon für 2008 über 1500 Treffer aus.

        Sicher hab ich von AJAX gehört, hab aber absolut keine Ahnung wie es umgesetzt wird. Und du meinst 1500 Treffer behandeln speziell mein Problem?

        die meisten. Es ist doch ganz simpel. Es steht im Wikipedia-Artikel ganz oben.

        Setze mit Javascript eine Anfrage an den Server ab. Nutze dazu XMLHttpRequest (im AJAX-Artikel verlinkt).
        Dein Skript liefert Dir die gewünschten aktuellen Daten. Mit diesen Daten ersetzt Du die veralteten Daten, deren Lage Du identifizieren kannst. Ich persönlich würde dazu innerHTML nutzen.

        Das häufigste was ich in den Beiträgen lese ist sowas wie "nimm AJAX", aber nicht wie das überhaupt funktioniert.

        Sorry, vorlesen werde ich Dir die verlinkten Artikel nicht.

        Grüße

        Vinzenz

        1. Hallo und guten Abend Vinzenz (und auch Cheatah)!

          die meisten. Es ist doch ganz simpel. Es steht im Wikipedia-Artikel ganz oben.

          Also dem Wiki konnte ich ehrlich nicht viel brauchbares entnehmen.

          Setze mit Javascript eine Anfrage an den Server ab. Nutze dazu XMLHttpRequest (im AJAX-Artikel verlinkt).

          Nachdem ich mich ein bisschen belesen hatte bin ich auch genau darauf gestossen. Und auf das Problem, dass der IE5+6 damit nicht umgehen kann, also hab ich auch gleich eine Alternative gesucht. ActiveX.
          Damit schlag ich mich dann rum wenn es im FF läuft denk ich mir.

          Also fange ich mal an

            
          function get_stats() {  
            var req = null;    // Variable deklarieren  
            req = new XMLHttpRequest();  
            req.open("GET", 'stats.php', true);  // request absenden  
            req.onreadystatechange = function() { // und diese Funktion ausführen  
              switch(req.readyState) {  
                case 4:  // wenn Transfer abgeschlossen  
                  if(req.status == 200) { // wenn Übertragung erfolgreich  
                    document.getElementById('stats').innerHTML = "Hund"; // Platzhalter, sonst: req.responseText;  // Daten in HTML schreiben  
                  }  
                  break;  
                default: // im Fall das der Transfer nicht abgeschlossen wurde tue nichts  
                  return false;  
                  break;  
              }  
            }  
          }  
          
          

          Meines aktuellen Wissensstandes müsste das funzen®.
          Leider passiert absolut nichts. Selbst die FF Fehlerkonsole bleibt leer :(

          Danke und Grüße, Matze

          1. Sorry, hier noch der HTML-Teil:

              
            <body onload="setInterval('get_stats()', 1000);">  
            <div id="stats">  
            </div>  
            
            

            Danke und Grüße, Matze

          2. Hi,

            Meines aktuellen Wissensstandes müsste das funzen®.
            Leider passiert absolut nichts.

            Na ja, das wuerde sich vielleicht dann aendern, wenn du den Request auch noch abschicken wuerdest ...

            req.open("GET", 'stats.php', true);  // request absenden

            Nein, "open" ist nicht Englisch fuer Abschicken.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
            1. Hallo Chris!

              Nein, "open" ist nicht Englisch fuer Abschicken.

              Ach....
              Darf ich das trotzdem so stehn lassen, damit ich weiß was passiert?
              Also, dass eine bestimmte Datei "angefordert" wird?!
              Sprich "geöffnet"! wird?

              Who cares!?
              Das sagt mir nichts über den relevanten Fehler!
              Du hilfst mir grad nicht wirklich!

              Grüße, Matze

              1. Hi,

                Who cares!?

                Me don't - ur da little bugga with da problem ...

                Das sagt mir nichts über den relevanten Fehler!
                Du hilfst mir grad nicht wirklich!

                Schau in jedem x-beliebigen AJAX-Beispielscript nach, welchen Methodenaufruf du vergessen hast.

                MfG ChrisB

                --
                „This is the author's opinion, not necessarily that of Starbucks.“
                1. Guten Morgen!

                  Who cares!?
                  Me don't - ur da little bugga with da problem ...

                  indeed...

                  Du hilfst mir grad nicht wirklich!
                  Schau in jedem x-beliebigen AJAX-Beispielscript nach, welchen Methodenaufruf du vergessen hast.

                  Ok ich hab geschaut und geschaut aber komm nicht drauf.
                  Interessanterweise habe ich ein ähnliches Beispiel gefunden mit dem es funktioniert.
                  Somit bin ich jetzt dort wo ich nicht hin wollte: ich hab die Lösung und weiß nicht warum ich es selbst nicht umsetzen kann. Nicht grad prima :(

                  Grüße, Matze

                  1. Du hilfst mir grad nicht wirklich!

                    Du hilfst dir gerade nicht wirklich.

                    Ok ich hab geschaut und geschaut aber komm nicht drauf.

                    Dann schau dir nochmal das Beispiel an:
                    http://de.wikipedia.org/wiki/XMLHttpRequest

                    Diese Schritte sind nötig:

                    1. XMLHttpRequest-Objekt erzeugen
                    2. open-Methode aufrufen
                    3. onreadystatechange-Handler setzen
                    4. send-Methode aufrufen

                    Ich nehme mal an, du kannst bis vier zählen, ansonsten verstehe ich nicht, wieso du den vierten Schritt weggelassen hast.

                    Interessanterweise habe ich ein ähnliches Beispiel gefunden mit dem es funktioniert.

                    Interessanterweise kommst du nicht auf die Idee, dessen Code mit deinem zu vergleichen?!

                    Mathias

                    1. Hallo Mathias!

                      Dann schau dir nochmal das Beispiel an:
                      http://de.wikipedia.org/wiki/XMLHttpRequest
                      Diese Schritte sind nötig:

                      1. XMLHttpRequest-Objekt erzeugen
                      2. open-Methode aufrufen
                      3. onreadystatechange-Handler setzen
                      4. send-Methode aufrufen
                        Ich nehme mal an, du kannst bis vier zählen, ansonsten verstehe ich nicht, wieso du den vierten Schritt weggelassen hast.
                        Interessanterweise kommst du nicht auf die Idee, dessen Code mit deinem zu vergleichen?!

                      Sicher bin ich auf die Idee gekommen, nur hab ich den Fehler wesentlich weiter oben im Code vermutet und deshalb die letzte Zeile übersehen oder nicht beachtet. Ich weiß es nicht.

                      Herzlichen Dank!

                      Jetzt habe ich in meiner Statistik aber noch ein Problem bekommen.
                      Ich habe ein Bild, welches ebenfalls aktualisiert wird.
                      Mein FF zeigt aber immer nur das erste Bild an. Ich denk weil er es im Cache behält und unter einer Datei mit selben Namen, Größe etc. auch den selben Inhalt vermutet und es deshalb nicht neu läd.

                      Wie kann ich das Problem jetzt noch lösen?

                      Danke und Grüße, Matze

                      1. Mein FF zeigt aber immer nur das erste Bild an. Ich denk weil er es im Cache behält und unter einer Datei mit selben Namen, Größe etc. auch den selben Inhalt vermutet und es deshalb nicht neu läd.

                        Lade ein Bild mit einer anderen, eindeutigen URI.
                        Eindeutigkeit ist schon gegeben, wenn du der URI einen Query-String mit dem aktuellen JavaScript-Timestamp) anhängst: uri = uri + "?" + (new Date).getTime();

                        Mathias

                        1. Hallo!

                          Mein FF zeigt aber immer nur das erste Bild an.
                          Lade ein Bild mit einer anderen, eindeutigen URI.
                          Eindeutigkeit ist schon gegeben, wenn du der URI einen Query-String mit dem aktuellen JavaScript-Timestamp) anhängst: uri = uri + "?" + (new Date).getTime();

                          Funktioniert bestens, danke!

                          Grüße, Matze

      2. Hi,

        Sicher hab ich von AJAX gehört, hab aber absolut keine Ahnung wie es umgesetzt wird.

        na, dann ist es jetzt an der Zeit, sich mit den Grundlagen zu beschäftigen.

        Und du meinst 1500 Treffer behandeln speziell mein Problem?

        Ein nicht unwesentlicher Teil davon dürfte sich mit Anfängerproblemen beschäftigen - und mehr als das hast Du nicht. Wie man die Datenbank abfragt weißt Du offenbar, AJAX ist nur für den Transport und die Einbindung der Daten zuständig.

        return = false;  // um den Seitenreload zu verhindern (hab ich noch irgendwie im Gedächtnis)

        Dein Gedächtnis trügt.

        Wie man sieht nicht viel.

        Um genau zu sein gar nichts.

        Das häufigste was ich in den Beiträgen lese ist sowas wie "nimm AJAX",

        Was man seltener liest ist dies:

        Gewalt und AJAX sind nicht schwer:
        Weniger ist meistens mehr.

        aber nicht wie das überhaupt funktioniert.

        Und was hast Du getan, um dies herauszufinden?

        Das Problem wenn ich jetzt Google bemühe und mir ein fertiges Script besorge

        Niemand sagt, dass Du fertige Scripts brauchst. Ein oder zwei Dutzend Code-Zeilen wirst Du noch selbst schreiben können.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. Meine erste Idee war jetzt ein Meta-Refresh aller 60 Sekunden, dass gefällt mir aber überhaupt nicht weil da auch der Rest der Seite neu geladen wird, dann fiel mir noch ein iframe ein, was ich aber auch für unschön halte also werde ich wohl JavaScript bemühen müssen.

    Was ist an einem iframe unschön?
    In deinem Fall klingt es nach einer schönen, einfachen und eleganten Lösung und du brauchst nicht mal JS.

    Struppi.

    1. Hallo!

      Was ist an einem iframe unschön?

      Semantik.

      Grüße, Matze

      1. Was ist an einem iframe unschön?

        Semantik.

        Das ist doch albern, du hast ein externen Inhalt und der gehört in ein Extra Dokument. Das ist durchaus sematisch.

        Struppi.

        1. Hallo!

          Was ist an einem iframe unschön?
          Semantik.
          Das ist doch albern, du hast ein externen Inhalt und der gehört in ein Extra Dokument. Das ist durchaus sematisch.

          Nein, das "extra Dokument" erstell ich ja gerade dynamisch.
          Wenn ich das jetzt auf einer Seite (in ein bestehendes Layout) unterbringen will würde ich auch wieder zu einem iframe tendieren.
          Evtl. will ich es aber auch jede Minute ausdrucken. (Gedankengang)

          Grüße, Matze