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.
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????
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.