Hallo, ich habe ein PHP-Programm gechrieben, das auf eine MYSQL-Datenbank-Tabelle zugreift. Nun möchte ich, dass die Seite, die auf die DB-Tabelle zugreift, wenn ein neuer Datensatz in der DB-Tabelle erscheint, neu geladen wird. Ist dies möglich?
Flughafen schrieb: > Ist dies möglich? Ja. Gibt mehre Möglichkeiten wie du das umsetzen kannst. Kommt darauf an was dir lieber ist, was du genau haben willst,...
Nein so direkt nicht. Du müsstest schon per Java-Script oder sowas eine Funktion einbauen, die in regelmäßigen Abständen die Seite neu läd oder beim Server erfragt ob sich etwas geändert hat.
Möglich ist das. Afaik wirst du hierfür jedoch JavaScript benutzen müssen. Einen konkreten Codeschnippsel kann ich dir leider nicht liefern, aber vom Ablauf sollte es so aussehen: 1. Dein JS ruft zyklisch ein PHP-Skript auf deinem Server auf. Nennen wir das Skript mal newData.php. Dieses Skript hat die Aufgabe zu prüfen, ob neue Datensätze vorhanden sind. Falls ja, liefert es den Text "true" zurück, falls nein, den Text "false". 2. Dein JS wertet die Rückgabe aus. Ist diese der Text "true" lässt es die Seite neu laden. Das wäre die einfachste Implementierung. Aufwändigere Implementierungen könnten so aussehen, dass newData.php die neuen Datensätze gleich zurückliefert. z.B. als XML oder JSON, und dein Skript diese dynamisch zur Seite hinzufügt. Ist etwas aufwendiger und nicht ganz so schnell zu programmieren, aber vom Ergebnis etwas sauberer, da nicht immer die Seite komplett neu geladen werden muss.
hp-freund schrieb: > http://www.drweb.de/magazin/xajax-ajax-einfach-mit-php/ In diesem Fall macht man das mit SSE. Und wenn schon Ajax dann mit jQuery oder einer anderen Bib, das fummelt doch keiner mehr von Hand zusammen, wenn es auch noch auf allen (alten) Browsern laufen soll.
lebensmittelhändler schrieb: > Und wenn schon Ajax dann mit jQuery Libraries sind überflüssig, statt ajax braucht man einen XMLHttpRequest, um einem client vom server aus über änderungen auf dem laufenden zu halten, nutzt man WebSockets. Ich hab da mal nen WebsocketServer in php geschrieben, empfehle aber serverseitig nodejs zu verwenden.
:
Bearbeitet durch User
Daniel A. schrieb: > Libraries sind überflüssig, statt ajax braucht man einen XMLHttpRequest, > um einem client vom server aus über änderungen auf dem laufenden zu > halten, nutzt man WebSockets. Ich hab da mal nen WebsocketServer in php > geschrieben, empfehle aber serverseitig nodejs zu verwenden. WebSockets oder SSE, ist eigentlich wurscht. SSE halte ich hier für einfacher, der Ursprungsposter hat eh kaum Plan vom Thema. Mit jQuery geht Ajax halt idiotensicher, behandelt Browsersonderfälle (ok die spielen heute eigentlich keine Rolle mehr) transparent und benutzt das eh nur noch darüber, wer fummelt denn heute noch von Hand auf dem XMLHttpRequest Object herum? Das nimmt einfach unnötige Arbeit ab.
lebensmittelhändler schrieb: > Ja. Gibt mehre Möglichkeiten wie du das umsetzen kannst. Kommt darauf an > was dir lieber ist, was du genau haben willst,... Dann schreib mal eine. Peter II schrieb: > nicht wirklich oder nur extrem unständlich. sebi707 schrieb: > Nein so direkt nicht. Deine Aussage steht im Widerspruch zu diesen beiden. sebi707 schrieb: > Nein so direkt nicht. Du müsstest schon per Java-Script oder sowas eine > Funktion einbauen, die in regelmäßigen Abständen die Seite neu lädt. Genau das nervige Neuladen wollte ich umgehen. Higg schrieb: > 1. Dein JS ruft zyklisch ein PHP-Skript auf deinem Server auf. Nennen > wir das Skript mal newData.php. Dieses Skript hat die Aufgabe zu prüfen, > ob neue Datensätze vorhanden sind. Falls ja, liefert es den Text "true" > zurück, falls nein, den Text "false". > 2. Dein JS wertet die Rückgabe aus. Ist diese der Text "true" lässt es > die Seite neu laden. Das ist ein guter Ansatz. Wie könnte denn newData.php das Prüfen? Eine Idee hätte ich dazu, man könnte in der Datenbank eine Spalte TIMESTAMP einfügen. Angenommen, das Javascript ruft alle 30 Sekunden das PHP-Script auf, dann muss dieses überprüfen, ob Datensätze innerhalb von 30 Sekunden vor der aktuellen Zeit eingefügt worden sind. Higg schrieb: > Das wäre die einfachste Implementierung. Aufwändigere Implementierungen > könnten so aussehen, dass newData.php die neuen Datensätze gleich > zurückliefert. z.B. als XML oder JSON, und dein Skript diese dynamisch > zur Seite hinzufügt. Ist etwas aufwendiger und nicht ganz so schnell zu > programmieren, aber vom Ergebnis etwas sauberer, da nicht immer die > Seite komplett neu geladen werden muss. Wie stellst du dir denn den Aufruf vor? Ich würde in die Seite mit <?php include("newData.php"); ?> newData.php einbinden. PHP kann dann ja die Zeit herausfinden. Dann wird immer wenn die Sekunden 0 oder 30 sind die Datenbank geprüft (s.o.). Wenn neue Datensätze vorhanden sind, werden sie mit echo() ausgegeben. Das include() muss an der dafür vohergesehenen Stelle erfolgen.
Flughafen schrieb: > Das ist ein guter Ansatz. Wie könnte denn newData.php das Prüfen? Eine > Idee hätte ich dazu, man könnte in der Datenbank eine Spalte TIMESTAMP > einfügen. Angenommen, das Javascript ruft alle 30 Sekunden das > PHP-Script auf, dann muss dieses überprüfen, ob Datensätze innerhalb von > 30 Sekunden vor der aktuellen Zeit eingefügt worden sind. date_modified, falls updates auch neu angezeigt werden sollen. index darauf nicht vergessen falls es "ein paar mehr" datensätze sind.
Da die Änderungen in der DB auch vermutlich nur von PHP kommen, braucht man eigentlich die DB nicht nach Änderungen zu befragen. Hier kommt jetzt nur das Problem. das es in PHP keine "globalen" Variable gibt. Die für alles Sessions und Request gültig sind. Das kann man aber z.b. mit memcache nachbilden. Dann braucht man auch nicht ständig die DB zu belästigen. Als Alternative kann man in einen Trigger in er DB anlegen, diese kann dann Shell befehle Ausführen und damit PHP benachrichtigen. Aber alles halt nicht wirklich schön.
Peter II schrieb: > Da die Änderungen in der DB auch vermutlich nur von PHP kommen Ja. Aber von irgendeinem PHP-Script, dass ich nicht immer in jeder Seite angeben möchte. Peter II schrieb: > memcache Was ist das?
c.m. schrieb: > date_modified, falls updates auch neu angezeigt werden sollen. index > darauf nicht vergessen falls es "ein paar mehr" datensätze sind. Daraus kann ich nicht viel machen. Kannst du es bitte genauer erklären? newData.php
1 | //V1 |
2 | Min=Minuten |
3 | Sek=Sekunden |
4 | u.s.w. |
5 | if(Min=30 or Min=0){ |
6 | $db=mysqli_connect("localhost","********","********"); |
7 | mysqli_set_charset($db,"utf8"); |
8 | mysqli_select_db($db,"db_name"); |
9 | $sql = "SELECT * FROM db_name WHERE zeit<'Jahr-Monat-Tag Std:Min:Sek' and zeit>'Jahr-Monat-Tag Std:Min:Sek-30'"; |
10 | $result = mysqli_query($db,$sql); |
11 | while ($row = mysqli_fetch_assoc($result)){ |
12 | echo "$row["spaltenname1']$row['spaltenname2'] ..."; |
13 | } |
14 | } |
Die Anzahl der Sterne lässt nicht auf die Länge des Passwortes und Benutzernamens schließen. zeit ist eine Spalte TIMESTAMP.
Die Seite kann sich doch selber aktualisieren.
1 | echo "<META http-equiv=\"refresh\" content=\"5;http://www.url.de/seite.php\">\n"; |
Flughafen schrieb: > Die Anzahl der Sterne lässt nicht auf die Länge des Passwortes und > Benutzernamens schließen. Oh, wie schrecklich! Jetzt ist aus ungefär 8 hoch 36 möglichkeiten < x hoch 36 geworden! Immerhin hatten wir ganze 0 möglichkeiten die wahre Identitat von localhost auf deinem PC zu ermitteln! :-)
Flughafen schrieb: > c.m. schrieb: >> date_modified, falls updates auch neu angezeigt werden sollen. index >> darauf nicht vergessen falls es "ein paar mehr" datensätze sind. > > Daraus kann ich nicht viel machen. Kannst du es bitte genauer erklären? http://dev.mysql.com/doc/refman/5.6/en/create-trigger.html dm enthält das datum der letzten änderung wenn du einen insert und update trigger anlegst der den aktuellen timestamp im datensatz ablegt.
Rene Schube schrieb: > Die Seite kann sich doch selber aktualisieren. Ja, aber das nervt aus mehreren Gründen: 1. Bei Scroll-Seiten muss man immer dahin scrollen, wo man gerade war. 2. Inhalte in <textarea> und <input> werden gelöscht. 3. Ladedauer und dadurch entstehende Unterbrechung
Flughafen schrieb: > Rene Schube schrieb: >> Die Seite kann sich doch selber aktualisieren. > > Ja, aber das nervt aus mehreren Gründen: > 1. Bei Scroll-Seiten muss man immer dahin scrollen, wo man gerade war. > 2. Inhalte in <textarea> und <input> werden gelöscht. > 3. Ladedauer und dadurch entstehende Unterbrechung Dann taugt das Konzept nichts! Ich habe bei einem Kunden eine Prozess Visualisierung laufen. Die Seiten werden in 100 - 200 ms komplett neu geladen. Die <textarea> und <input> automatisch wieder befüllt. Und selbst Bilder malen mit HTML5 Canvas geht in der Zeit. Allerdings habe ich das Design auf heutige Bildschirmauflösungen angepasst und bekomme alles auf eine Seite, ohne Scrollbars. Die "Unterbrechung" sieht man, "is not a bug is a feature".
Rene Schube schrieb: > Ich habe bei einem Kunden eine Prozess Visualisierung laufen. Die Seiten > werden in 100 - 200 ms komplett neu geladen. Die <textarea> und <input> > automatisch wieder befüllt. Und selbst Bilder malen mit HTML5 Canvas > geht in der Zeit. Dann schreib mal wie du das machst. Für den Scrollbalken: einfach auf die Position setzen mit blablabla.php#position auf den <div id="position"/>.
Peter II schrieb: > Dann braucht man auch nicht ständig die DB zu belästigen. > Als Alternative kann man in einen Trigger in er DB anlegen, diese kann > dann Shell befehle Ausführen und damit PHP benachrichtigen. Die DB fühlt sich dadurch bestimmt nicht belästigt und irgendwelche Trigger Lösungen sind doch hier viel zu kompliziert gedacht. Nach einer HighLoad Seite hört sich das nun nicht an. Benutz jQuery und dort ist .load() dein Freund. in dein JS - File packst du $( document ).ready(function() { $("#sqldata").load( "sql.php" ); }); und bindest das ganze in deiner Hauptseite ein. sqldata ist die Div-ID auf deiner Hauptseite. Jegliche Ausgabe die du in sql.php machst, landet dann dort. Ob du in sql.php nun einefache Texteausgabe machst, oder eine Tabelle erstellst, etc bleibt dir überlassen. Ob du dann alle Einträge der letzten 30min oder einfach die letzten 10 Einträge in der DB anzeigst, bleibt dann dir überlassen. Und klar kann man automatisch alle x-Sekunden die Seite komplett neuladen lassen. Wirklich zeitgemäss ist das aber nicht mehr
Eigentlich muss sql.php nur prüfen, ob in den letzten 30 Sekunden ein Eintrag gemacht worden ist. Das Aufrufen kann Javascript übernehmen. A. B. schrieb: > $( document ).ready(function() { > $("#sqldata").load( "sql.php" ); > }); Das müsste ich dann ändern in
1 | function rufedbtestauf (){ |
2 | $( document ).ready(function() { |
3 | $("#sqldata").load("sql.php"); |
4 | }); |
5 | } |
6 | setInterval (ruftdbtestauf(),30000); |
Ich gehe davon aus, dass JQuery bereits eingebunden ist. Daniel A. schrieb: > Oh, wie schrecklich! Jetzt ist aus ungefär 8 hoch 36 möglichkeiten < x > hoch 36 geworden! Immerhin hatten wir ganze 0 Möglichkeiten die wahre > Identitat von localhost auf deinem PC zu ermitteln! :-) Genau das wollte ich.
Flughafen schrieb: > Das müsste ich dann ändern in > function rufedbtestauf (){ > $( document ).ready(function() { > $("#sqldata").load("sql.php"); > }); > } > setInterval (ruftdbtestauf(),30000); > Ich gehe davon aus, dass JQuery bereits eingebunden ist. eher in
1 | $( document ).ready(function() { |
2 | setInterval (ruftdbtestauf(),30000); |
3 | } |
4 | |
5 | function rufedbtestauf (){ |
6 | $("#sqldata").load("sql.php"); |
7 | }); |
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.