Bei Datenbankänderung User die Ergebnise zeigen

praktikant81

Mitglied
Ich bin neu hier un wollte erst einmal Hallo sagen!

Hoffe ihr könnt mir vielleicht etwas licht ins dunkle bringen. Weiß auch nicht genau ob es an dieser Stelle im Forum richtig ist, aber jetzt zu meinem Problem.

Ich habe vor eine Tabelle aus einer MySQL-Datenbank zu erstellen. Man soll die Daten in der Tabelle auch ändern können, so das diese in der Datenbank gespeichert werden.

Jetzt zu meinem Problem. Wenn nur ein User auf die Seite zu greift ist da ja weiter kein Problem. Sollte sich aber noch ein User die Seite ansehen, möche ich, das dieser die Änderung auch gleich mitbekommt.
Habe da an schon an einen Automatischen refresh gedacht, aber das gefällt mir nocht, da die Seite ja dann auch geladen wird wenn nicht geändert wurde.

Gibt es irgendeine Möglichkeit, die Seite von User B irgendwie neu zu Laden, wenn User A eine änderung gemacht hat? Oder auch umgedreht?

Ich weiß PHP ist eine Serverseitiges Skipt, aber vielleicht gibt es ja eine Möglichkeit aus der Kombinationen von mehreren Skiptsprachen!

Google hab ich auch schon bemüht aber noch nicht brauchbares gefunden! Aber vielleicht habe ich ja hier erfolg!

Danke schon einmal im vorraus!!
 
Willkommen im Forum.

Wie du richtig festgestellt hast, ist das Neuladen der Seite die einfachste aber unschönste Lösung.

Das nächst-bessere und auch leicht umzusetzen wäre, dass du via AJAX beim Server fragst, ob es was neues gibt (z.B. alle 10 Sekunden). Das nennt sich Polling und ist üblich. Aber leider nicht gut skalierbar, wenn du jetzt nicht nur zwei sondern 100 Besucher hast. Ich weiß nicht wie deine AJAX Kenntnisse sind, aber mit minimalen Kenntnissen lässt sich das auch ohne Anleitung umsetzen.

Die Beste Lösung, aber auch die am kompliziertesten umzusetzende, wäre "Push" (im Gegensatz zu Polling). Also sobald jemand etwas an den Daten ändert, sendest du an alle aktuellen Besucher im Hintergrund die Info. Das ist leider mit PHP auch nicht wirklich gut zu lösen. Hier paar Links:
http://en.wikipedia.org/wiki/Comet_(programming)
http://stackoverflow.com/questions/603201/using-comet-with-php
http://socket.io/ + http://nodejs.org/


Wenn du nicht viele Besucher hast, dann nimm einfach Lösung 2. Wenn du auf der PHP Seite keine aufwändigen Sachen treibst (zum prüfen, ob sich eine Tabelle geändert hat, reicht ja eine simple PK Abfrage) und nur "0" oder "1" als Antwort lieferst (kein Overhead für XML o.ä.). Dann solltest du auch mit mehreren Besuchern erst mal keine Probleme haben. Bau es erst mal so simpel wie möglich und mach dir Gedanken über eine performantere Lösung, sobald du Probleme feststellst.
 
Hi,

danke für deine schnelle Antwort!

Mit Ajax habe ich noch nicht wirklicht bzw keine Erfahrung, will mich da aber mal reinlesen! ;)

Hast du Zufällig nen Tip für nen gutes Buch für Ajax?! ;)

Ich weiß es gibt Google, aber da gibt es ja tausende von****** ;)

Und nun steh ich gerade auf dem Schlauch! Was meinst du mit PK-Abfrage?
 
Da AJAX meiner Meinung nach so simpel ist, wäre ein Buch overkill. Sofern du JavaScript Kenntnisse hast, ist AJAX nur die Verwendung neuer Methoden mit vorhandenen Kenntnissen.

Und nun steh ich gerade auf dem Schlauch! Was meinst du mit PK-Abfrage?

PK = primary key. Also von Trivialitäten abgesehen, die schnellste Abfrage, die man auf Relationalen Datenbanken machen kann. Vorrausgesetzt du hast einen PK, der automatisch hochgezählt wird, dann übergibst du deinem Besucher den aktuell höchsten Wert. Diesen sendet er bei jedem AJAX Request mit, und du musst nichts weiter tun als:

SQL:
SELECT 1 FROM my_table WHERE id = $cur_id + 1;

Wenn die Abfrage ein Ergebnis liefert, weißt du, dass es mindestens einen neueren Eintrag gibt. Jetzt würde dein PHP Skript "1" ausgeben, ansonsten "0". Mehr muss das gar nicht können.

Der AJAX Teil ist genauso simpel. Ich kann dir kein Tutorial empfehlen, aber nach etwas Googlen steht hier z.B. alles drin, was man braucht: http://www.xul.fr/en-xml-ajax.html#request-step-by-step Das Beispiel Dokument am Ende kannst du als Basis verwenden.
 
Zurück