Benachrichtigungen über neue Einträge

dennis-sauer

Erfahrenes Mitglied
Hallo zusammen,

ich nutze ein einfache Datenbank mit u.a. technischen Störungen, nun möchte ich, wenn eine neue technische Störung eingegeben wird, dies auch visuell erscheint.

Derzeit wird einfach eine Zahl oben rechts um einen Wert erhöht oder ggf. verringert (wenn die Störung nun erledigt ist)

Das klappt alles wunderbar!

Code:
 $(document).ready(function() {
   var refreshId = setInterval(function() {
      $("#refresh_technik").load('refresh/technik.php');
   }, 1000);
   $.ajaxSetup({ cache: false });
});

Die 1000 sind derzeit nur ein Testbeispiel!

Hier wird jetzt alle 1000 Millisekunden das div mit der id=refresh_technik aktualisiert, dort habe ich ein eine einfache Datenbankabfrage eingebaut.

Wenn z.B. ein User etwas in die Datenbank schreibt wird der neue Eintrag mittels einer Meldung bestätigt.

Code:
<script>$.notification({title: 'Benutzer angelegt!',content: 'Es wurde ein neuer Benutzer angelegt',timeout: 5000,showTime: true, success: true, icon: 'W'});</script>

Besteht nun für mich die Möglichkeit, dies zu "kombinieren". Sprich nicht nur die Zahl oben wird aktualisiert, es soll auch eine Benachrichtigung ausgegeben werden.

Danke und Grüße

Dennis
 
Ich habe die vergangenen Tage ein wenig gebastelt und könnte der Lösung langsam näher kommen. Ich habe nur das Problem, das in meinem obigen Ajax Beispiel ich das Div zwar aktualisiere, aber die auf der technik.php erzeugte Variable $stoerungen_aktuell nicht benutzen kann.

Alles wird angezeigt aber wenn ich an einer beliegen Stelle der Seite die o.g. Variable nutzen will z.B. zum rechnen geht das nicht! Sie ist grundsätzlich leer. Kann ich das irgendwie ändern?
 
Wie soll der Wert der Variable genützt werden, in einem Javascript oder weiter mit PHP?

Wenn du es für Javascript brauchst, dann schreib den Inhalt der Variablen z.B. in ein verstecktes Textfeld und lies in da einfach wieder aus, wenn du in für PHP benötigst, dann speichere ihn in einer Session.
 
Hey,

danke erstmal für deine Antwort, aber das klappt anscheinend so auch nicht. Ich nutze ein Login-System und habe entsprechend auch schon eine Session laufen.

Ich habe jetzt mal die technik.php angepasst:

PHP:
	// Die Datenbanken werden aufgerufen
	$db = new Database("technik");
		
	// Technische Störungen
	$anzahl_stoerungen = $db->executeQuery("SELECT * FROM stoerungen WHERE status = 'open' ");	
	$_SESSION["stoerungen_gesamt_aktuell"] = $anzahl_stoerungen->getRowCount();
	
	echo $_SESSION["stoerungen_gesamt_aktuell"]

Aber auch da wird die Variable/SESSION nicht weitergeleitet. Wobei das jetzt natürlich eher in den PHP Bereich geht. Ich dachte ich kann in meinem Ajaxbefehl oben

Code:
   var refreshId = setInterval(function() {
      $("#refresh_technik").load('refresh/technik.php');
   }, 1000);
   $.ajaxSetup({ cache: false });
});

etwas anpassen um die Variable übermittelt zu bekommen.
 
Hast du auch irgendwo session_start stehen und wenn ja, wo steht es überall?

NACHTRAG: Erkläre bitte nochmal genauer von wo nach wo die Variable übergeben werden soll. So wie ich es verstehe wird per Ajax die Datei technik.php aufgerufen. Dort wird die Variable $stoerungen_aktuell bzw. $_SESSION["stoerungen_gesamt_aktuell"] erzeugt.

Wo soll sie dann weiter verwendet werden?
 
Zuletzt bearbeitet:
Ja klar hab ich das. Auf jeder Seite wird checkuser.php per include eingebaut. Alle anderen SESSIONs kann ich problemlos verarbeiten.

Nachtrag:

Du hast soweit alles richtig verstanden. Dann benötige ich die Variable um sie mit einer anderen Variable aus der Session zu vergleichen.

Also:

1. Die Anzahl wird oben in der Navigation angezeigt (4)
2. Die Anzahl wird benötigt, um dann mit der beim Login erzeugten Session Variable (ggf 3) zu vergleichen und dann eine Meldung auszugeben. "Achtung neue Störung" und nicht nur einfach die Zahl rechts oben aktualisieren.

Im Endeffekt passiert das dann alle 5 Minuten. Auf der Hauptseite übrigens!
 
Zuletzt bearbeitet:
Das Problem daran ist das durch document.ready die "technik.php" erst aufgerufen wird wenn die ursprüngliche Seite selber fertig geladen ist.
Erst dann wird auch die Session Variable mit dem entsprechenden Wert belegt.

Mir fällt leider keine andere Möglichkeit ein als das du eine zusätzliche Datei erstellst in welcher der gültige Startwert für die Session Variable erstellt wird und die du per include dann ganz am Anfang einbindest.
 
Andere Frage, muss die Berechnung den unbedingt auf der Hauptseite durchgeführt werden oder kannst du das vielleicht auch in die "technik.php" auslagern?

Dann hätte sich das Problem doch auch erledigt.
 
Letzlich ist mir das Wurscht wo die Berechnung durchgeführt wird.

In der check.php wird die Session mit dem aktuellen Wert in der DB beim Login gespeichert.(Neben einigen anderen Dingen, wie der Username und und und) Hier das Beispiel nur für die aktuellen technischen Störungen.

PHP:
  // Session wird erstellt für die technischen Störungen
	// Abfrage der Datenbank
$technik = $db->executeQuery("SELECT * FROM stoerungen WHERE status = 'open' "); 
	// Variablen werden angelegt
  $_SESSION["anzahl_technische_stoerungen"] = $technik->getRowCount();
  $_SESSION["erstellungszeit_technik"] = time();

Dann befinde ich mich z.B. auf der Seite dashboard.php dort wird per include u.a. checkuser.php eingebunden.

Inhalt:

PHP:
session_start (); 
if (!isset ($_SESSION["user_id"])) 
{ 
  header ("Location: dashboard.php?content=dashboard"); 
}

Nun gibt es bei dashboard.php noch per include die Seite top_navigation.php. Dort befindet sich rechts oben ein Infosymbol mit einem Badge. Das Badge ist ein div mit der id = refresh_technik.

Dann folgt auf dashboard.php der Javascriptteil (siehe oben) Dieser aktualisiert in meiner Testversion jede Sekunde die id = refresh_technik und holt die Daten aus der Seite refresh/technik.php.

Ich denke mal wo ich den Vergleich zwischen $stoerungen_aktuell und $anzahl_technische_stoerungen (vom Login) dürfte relativ egal sein. Aber ich glaub wenn ich dann widerum ein z.B. JGrowl ausführen will müsste ich das ja auch auf technik.php schreiben und da könnte ich mir vorstellen das es net klappt. Wäre aber ein Versuch wert!
 

Neue Beiträge

Zurück