• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Popup an User, welche Online sind

NickName

New member
Hallo,

Aktion: User A füllt ein Formular (Auftragsdaten) aus, PHP prüft verfügbare (online) User und bestimmte Kriterien - User B und C erfüllen diese Kritereien und sind online
Todo: User B und C sollen nun ein Popup mit Angaben zu diesem Auftrag erhalten

Kann mir jemand sagen, ob und wenn ja, wie es möglich ist, auf die Aktion von User A ein Popup an User B und C zu senden?


Ich habe leider nix bei meiner Lösungssuche gefunden oder evtl. nicht die richtigen Stichwörter eingegeben, hoffentlich konnte ich wenigstens einigermaßen verständlich erklären, worum es mir geht ;)


Vielen Dank im Vorraus

MfG Nick
 
Müssen sich die User da irgendwie anmelden, so das du vornherein weißt, wer und wieviele online sind oder soll das ganze offen sein, so wie bei vielen Support-Chats, wo ein Script prüft ob jemand was in ein Feld eingeben hat (eine Frage an den Support) und dann eine DB abfrage macht, wer in der DB eingeloggt ist und in den letzten Minuten noch was geschrieben hat, also online ist.
?

Schau auch mal unter dem Suchtext "php User Online Status"
 
Zuletzt bearbeitet:
Ja, jeder Benutzer muss sich anmelden und ein script prüft wer gerade on ist.
All das ist schon programmiert - mir geht es nur darum, dass popup an die ausgewählten user, durch die Aktion eines anderen users, zu senden

Greetz
 
und wonach werden die User, die das PopUp sehen sollen ausgewählt?
Soll das an alle on-User oder nur an bestimmte?

Reicht als Aktion das ausfüllen eines Feldes?
Dann dieses einfach überwachen mit Focus.

Falls letzteres, musst du das filtern, aber kann dir da so ausm kalten nicht genau helfen, da ich PHP nicht gerade leidenschaftlich betreibe.
Warte einfach etwas, bis die Experten für PHP online kommen. (meist gegen Abend)
 
Zuletzt bearbeitet:
Also...
User A füllt ein Formular aus in dem er verschiedene Angaben macht - nach absenden des Formulars prüft ein Script, welche user online sind (hier User B und User C sowie User D) und prüft dann Schritt für Schritt, ob die Angaben von User A mit den in der DB hinterlegten Angaben von User B, C und D übereinstimmen. Bei User B und User C passt alles - somit sollen diese beiden User ein Popup (ohne eigenes Zutun wie zb. Seitenwechsel oder Aktualisierung) erhalten.

MfG
 
Zuletzt bearbeitet:
Die Feststellung, ob jemand online ist ist der Knackpunkt. Wenn kein Websocket verfügbar ist müssen alle Clients pollen. Da heißt es, das richtige Intervall zu finden, dass der Server nicht überläuft und gleichzeitig die Onlinefeststellung nicht zu lange dauert. Um wieviel User geht es denn maximal?
 
Die Prüfung wer online ist, ist schon erledigt - ohne große Umstände oder Serverlast - DB, Sessions und simple Mathematik werden dazu genutzt.
Ich habe also UserID's der zu benachrichtigenden Benutzer und brauche nur noch eine Lösung, diesen Usern ein popup zu schicken
 
Mit jquery und der Funktion modal () könnte das gehen. Google mal nach "popup an userid php" solltest da was auf stackoverview zum Thema "pass values in a modal" finden, was eventuell helfen könnte.
 
In diesem Beitrag steht doch aber:
If I click on the link Show appears the modal pop up:
Jedoch schrieb NickName:
...Bei User B und User C passt alles - somit sollen diese beiden User ein Popup (ohne eigenes Zutun wie zb. Seitenwechsel oder Aktualisierung) erhalten.
Also passt das schonmal nicht mit einer reinen Clientseitigen Lösung, wie bei deinem Vorschlag.

Soweit ich das verstehe wird eine ständige Verbindung zum angemeldeten Server benötigt, welche Eventbasiert ist und so der Server bei einem Event (User B und C match) etwas zum Client schickt, der wiederum dieses Event (Serverpoll) auswertet und entsprechend reagiert. Glaube das war dieses Websockets, was mikdoe erwähnt hat. Hatte mal was von so einem System gelesen aber noch nie versucht umzusetzen. Bin also nicht witklich firm damit.
 
Mhhh, das hört sich so an, als wäre die Anzahl der User auf Grund der Performance begrenzt...
Es muß doch aber andere Lösungen geben - wie macht das zum Beispiel Facebook? Die haben doch zb. on the fly Chatbenachrichtigungen (icon oben ändert sich), könnte mir vorstellen, dass das ähnlich der von mir gewünschten Funktion sein sollte. Oder laden die einfach die Seite in kurzen regelmäßigen Abständen nach?
 
FB benutzt entweder Websockets dafür oder pollt. Ich glaube, die pollen auch. Schau doch einfach in den Quelltext.
 
Ja, hier wären Websockets (bzw. vor allem in Verbindung mit node.js) mit der bidirektionalen Keep-Alive-Connection perfekt geeignet. Ein paar Infos zu den Schwierigkeiten dabei: http://forum.jswelt.de/allgemeine-d...n-rund-ums-internet/59589-websocket-chat.html
Ansonsten hätte ich folgende Idee für das effizientere Feststellen des Onlinestatus, statt alle x Sekunden pollen und damit Serverresourcen beanspruchen zu müssen:
Code:
window.onmousemove = WaitForStatusUpdate;
window.onbeforeunload = SetUserOffline;

function WaitForStatusUpdate(){
  if(typeof(timeout) != "undefined" && timeout !== null){
    clearTimeout(timeout);
  }
  timeout = setTimeout(SetUserOffline, 300000); //ja, eine globale Variable! ;)
}

function SetUserOffline(){
  /*
  * PHP-Skript per AJAX benachrichtigen, das den User-Status in der Datenbank ändert
  */
}
 
Kann ich denn nicht einfach den schon durch php ermittelten Onlinestatus Status nutzen?
Ich brauche keine ständige Abfrage dazu, denn es muss nur beim absenden des Formulars durch User A ermittelt werden, wer gerade online ist (und das passiert wie gesagt per php)

Mir kommt es so vor, als ginge es euch immer nur darum, wer gerade online ist und nicht darum das popup anzuzeigen... Oder verstehe ich da irgendwas falsch und ich MUSS zwingend den Onlinestatus per jscript/ajax oder ähnlichem ermitteln?


Ich frage nochmal anders...

Wie kann der User A den Usern B und C ein popup schicken, ohne das die Empfänger irgendwas machen müssen (reload, Seitenwechsel usw.) ?
 
Zuletzt bearbeitet:
Wenn ich das richtig verstanden habe, müssen doch User B und C online sein, um das PopUp zu bekommen, oder?

Kann sein, das ich das falsch sehe, aber ich meine schon, das du dann fragen musst ob die Online sind.
 
Kann ich denn nicht einfach den schon durch php ermittelten Onlinestatus Status nutzen?
Ich brauche keine ständige Abfrage dazu, denn es muss nur beim absenden des Formulars durch User A ermittelt werden, wer gerade online ist (und das passiert wie gesagt per php)
Was meinst du mit dem "durch PHP ermittelten Onlinestatus"? :confused:
 
Also, als erstes mal ein schnell geschriebener Schnippsel, der zeigen sollte, wie ich das meine:

PHP:
<?php
	// $user = alle user
	// Prüfen welcher User online ist
	// Prüfen OnlineUser Auftragnehmer sind
	// Prüfen ob OnlineAuftragnehmer gleiche Sprache und Kategorie wie Auftraggeber im Profil angegeben haben
	if($user == 'online' AND $userrecht == 'auftragnehmer' AND $usersprache == $auftraggebersprache AND $userkategorie == $auftragskategorie){
		// Den ermittelten AUFTRAGNEHMERN ein Popup schicken - der folgende Code würde ja dem AUFTRAGGEBER, falls dieser die Kriterien erfüllt, das Popup senden... soll aber an die AUFTRAGNEHMER gehen ;)
		?>
		<script type="text/javascript">
			<!--
					window.open('announce_popup.php','PopUp','width=480,height=120'); 
			//-->
		</script>
		<?php
	}
?>


Nun der PHP-Code zum ermitteln, wer Online ist:

PHP:
	// WER IST ONLINE
	$wio_sql = "SELECT * FROM User ORDER BY ID ASC";
	$wio_result = mysql_query($wio_sql) OR die("<pre>\n".$wio_sql."</pre>\n".mysql_error());
	$JobberCheck = array();
	while($wio_row = mysql_fetch_assoc($wio_result)){
		// EXISTIERT EINE SESSION ID UND DER USER WAR NICHT LÄNGER ALS 5 MINUTEN INAKTIV, SO WIRD ER ALS ONLINE BETRACHTET
		if($wio_row['SessionID'] AND (time()-60*5 < $wio_row['Letzte_Aktion'])){
                     //Prüfung anderer Kriterien und Popup an ermittelte User schicken
		}
	}


PS: Es gibt doch hier im Forum die Funktion "Popup-Fenster bei einer neuen Privaten Nachricht:" - so etwas in der Art schwebt mir wohl vor
 
Zuletzt bearbeitet:
Jeder Client muss dazu in einem bestimmten Intervall an ein Serverskript pollen, das aus der Datenbank die für ihn passenden Beiträge ausliest, und falls es einen gibt, diesen anzeigt.
Beispielsweise in etwa so:
Code:
var pushInt = 30; //alle 30 Sekunden abfragen, ob neue Push-Benachrichtigung vorliegt
window.onload = function(){
  setTimeout(getPushNotification, pushInt * 1000);
}

function getPushNotification(){
  $.ajax({
    type: "POST",
    url: "serverscript.php",
    data: {
      //Angaben über aktiven User, z.B. Name oder Session-ID
    }
  })
  done: function(data){
    var json = JSON.parse(data);
    if(json.push !== "nothing"){
      var push = json.push;
      alert(push);
    }
  });
}
Anstatt einem herkömmlichen alert bieten sich hier auch praktische Webnotifications (Notification - Web API Interfaces | MDN) an. Und natürlich kann man die Meldung auch einfach irgendwo ins HTML schreiben und mit CSS gestalten.
Serverseitig musst du neue Anfragen aus der Datenbank auslesen und als JSON per echo ausgeben; falls keine neuen passenden Benachrichtigungen vorhanden sind, "nothing" zurückgeben.
 
Zuletzt bearbeitet:
Vielen Dank, glaube damit komme ich dem Ziel etwas näher ;)

Aber: ich sende nix aus der DB, er soll lediglich über einen neuen Auftrag inkl. Link zu diesem informiert werden - ich glaube, dieser Ansatz ist noch zu kompliziert für meine Bedürfnisse

Ich schau mir das trotzdem die Tage mal an und werd sehen, ob ich mir daraus oder den genannten Webnotifications etwas basteln kann.

MfG Nick
 
Zurück
Oben