Forum: PC-Programmierung Werte aus MySQL für Google Charts werden nicht aktualisiert


von R. F. (inet_surfer88)


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte Daten aus einer MySQL Datenbank mit Google Charts 
(Liniendiagramm) auf einer Webseite anzeigen. Weiterhin sollen die 
Grafiken ohne kompletten Seitenreload alle Minute aktualisiert werden. 
Leider funktioniert das nicht. Wenn neue Werte in die Datenbank hinzu 
kommen werden diese im Google Charts nicht angezeigt.
Um nicht das komplette Projekt hochladen zu müssen habe ich 2 
Testdateien erstellt, um den Code minimal zu halten.

Datei sql_test2.php:
Hier werden die Daten aus der Datenbank abgerufen und korrekt im 
Liniendiagramm angezeigt. Zum Testen wird hier nach 5 Sekunden 
aktualisiert und ein fest im Code stehender Wert hinzugefügt. Das 
funktioniert ohne Probleme. Die setIntervall-Funktion funktioniert also 
und aktualisiert das Diagramm.

Datei sql_test3.php:
Auch hier wird das Diagramm zunächst korrekt angezeigt. Die 
Aktualisierung steht derzeit auf 10 Sekunden. Nach der Aktualisierung 
werden die Daten aus der Datenbank neu ausgelesen um das Diagramm zu 
aktualisieren.
Vorgehensweise: Die Seite wird geladen und das Diagramm aufgebaut, 
sofort danach wird in der Datenbank ein Wert eingefügt, nach Ablauf der 
10 Sekunden wird das Diagramm aktualisiert. Das Problem: Der neu 
eingefügte Wert wird nicht angezeigt. Zum Testen habe ich das 
SQL-Statement in der Aktualisierung geändert und die Zeile mit der id1 
ausgeschlossen. Nach der Aktualisierung verschwindet zwar der Wert von 
id1, das Diagramm aktualisiert also, aber der neu eingefügte Wert 
erscheint nicht. Es bringt auch nichts per SQL-Statement nur die letzte 
Zeile zu lesen und per addRow hinzuzufügen. Auch das funktioniert nicht. 
Zwischen dem ersten Seitenaufbau und dem ersten Aktualisieren habe ich 
auch schon einen vorhandenen Wert in der Datenbank geändert. Auch dieser 
wird nicht aktualisiert.
Wenn ich über F5 die Seite neu lade, dann sind alle Werte sofort da und 
das Problem besteht nicht.

Ich wollte auch schon die SQL-Fehler anzeigen, falls welche auftreten 
sollten. Aber da es innerhalb von JavaScript ist werden die wohl auf der 
Seite nicht angezeigt.

Ich habe den JS-Code auch schon im Header und im Body getestet, kein 
Unterschied.

von R. F. (inet_surfer88)


Lesenswert?

Nachtrag:
Mir kam gerade noch eine Idee. Ich habe die beiden SQL-Statements 
vertauscht. Beim ersten Seitenaufbau ohne die id1, bei der 
Aktualisierung dann alles. Zwischenzeitlich wieder ein neuer Wert 
eingefügt. Beim Aktualisieren kommt zwar die id1 hinzu, nicht aber der 
neue Wert.

Also mit id1 meine ich die erste Zeile der Tabelle der Datenbank. Die 
Tabelle hat als erste Spalte "id" mit autoincrement.

Ich kapier es nicht, und vor allem warum geht es wenn man die komplette 
Seite neu lädt????

von Jim M. (turboj)


Lesenswert?

Schau Dir die generierte HTML Seite mal im Quelltext an.

Fällt Dir was auf?




Wenn nein: Der PHP Code wird nur einmal beim Erzeugen der Seite 
aufgerufen, danach nie wieder. Das dynamische fetchen via Java Script 
oder JSON muss man anders lösen.

von R. F. (inet_surfer88)


Angehängte Dateien:

Lesenswert?

Erst mal Danke für den Hinweis. Hätte ich eigentlich selber drauf kommen 
können (müssen).

Ich habe es jetzt umgebaut und mit jquery gemacht. Siehe die beiden 
Dateien im Anhang. Das automatische Nachladen funktioniert jetzt ohne 
Probleme.

Dafür habe ich jetzt ein anderes Problem:
Bei ersten Laden der Seite wird anstelle des Diagramms "Table has no 
columns." angezeigt. Beim ersten Autoreload oder manuellem aktualisieren 
ist das Diagramm dann da. Da in der fertigen Seite der Autoreload auf 
einer Minute sein soll ist das natürlich nervig immer die Seite 
aufzurufen und dann gleich mal F5 zu drücken.

Ich vermute das Diagramm soll angezeigt werden obwohl die php-Seite mit 
dem JSON-Array noch nicht fertig erstellt ist??? Liege ich hier richtig?

Wie könnte man das Problem lösen. Meine Idee wäre so eine Art 
"Zeitschleife", bis das Diagramm erstellt ist. Wüsste jetzt aber nicht 
wie und wo ich da eingreifen kann.

Ich habe zum Testen in der $(document).ready als Funktion setTimeout 
aufgerufen. In setTimeout dann den ajax-Befehl. Aber das gibt mir auf 
der Seite dann den kompletten ajax-Befehl als String aus??.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.