Online Status abfrage / Online anzeige nach login

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Online Status abfrage / Online anzeige nach login

    Hallo ich versuche eine online anzeige zu machen das man wenn man sich einlogt dann als online angezeigt wird. Habs mal so versucht.


    Quellcode

    1. // User Online / Offline Status abfrage
    2. function online()
    3. {
    4. $this->query("SELECT userid FROM user_online_status");
    5. $row = $this->fetch();
    6. $this->err();
    7. }
    8. // User Online / Offline Status speichern
    9. function check_online()
    10. {
    11. $this->query("INCLUDE $_SESSION['id'] INTO userid FROM user_online_status");
    12. $row = $this->fetch();
    13. $this->err();
    14. }
    Alles anzeigen




    und das als abfrage eintrag

    if($row['userid']=$_SESSION['id']) {

    Bin Ihrgendwie ein wenig ratolos

    Kann mir da vieleicht jemand helfen?

    Gruss

    Dragon
    Riek-Media.com - Webhosting riek-media.com
  • Quellcode

    1. $this->query("INCLUDE $_SESSION['id'] INTO userid FROM user_online_status");


    Das geht schonmal garnicht :)

    Quellcode

    1. $this->query("INSERT INTO user_online_status (session) VALUES ('".$_SESSION['id']."'");


    Wobei ich glaube das auch ein INSERT falsch ist sondern ehr ein UPDATE falls du kennzeichnen willst WER online ist :)

    Deine Funktion ist auch flasch

    Quellcode

    1. function online()
    2. {
    3. $this->query("SELECT userid FROM user_online_status");
    4. $row = $this->fetch();
    5. $this->err();
    6. }


    Du greifst auf eine Varibale IN DIESER fuktion zu mit $this->query, wenn du sowas machst dann solltest du query shon registrieren, bevor du die Variable initialisierst.

    $row = $this->fetch() <--- wird nie funktionieren, was auch immer du damit bezwecken willst das klappt nicht. Das ist etwas zusammenhangslos.

    Falls du eine Klasse geschrieben hast, musst du diese globalisieren... und auf Klassen-Ojekte greifst man nicht mit $this-> zu.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hi.
    Warum machst du es nicht einfach so, dass du eine Spalte in der Tabelle machst ("online" zum Beispiel) und beim Einloggen trägst du dort beim jeweiligen User das Wort "ja" ein und sobald er sich ausloggt (noch vor session_destroy()) lässt du die Spalte auf "nein" updaten.
    Und dann, bei der Anzeige, suchst du einfach nach allen Spalten, wo "ja" steht und gibst die Usernamen dazu aus.

    Grüße
    Nach langer Zeit wieder ein bisschen als Programmierer tätig
  • Naja, einfach ein Login-Skript und in der login.php wird ein UPDATE-Befehl ausgeführt, der "ja" einträgt und vor session_destroy() in logout.php findet noch ein UPDATE statt, der "nein" einträgt. So leicht ist das, so würds ich machen...
    Nach langer Zeit wieder ein bisschen als Programmierer tätig
  • ja bei mir ist es leider nicht so einfach da dies im browsergame eingebaut werden muss ect.

    Habs aber mitlerweile hinbekommen so wie es sein sollte jedoch ist dort ein fehler er zeigt mir an das alle user online sind was ja nicht ganz hinhaut und ich weiss nicht sorecht warum

    hier die funktion

    Quellcode

    1. // User Online / Offline Status
    2. function user_get_online()
    3. {
    4. $this->query("SELECT online FROM users WHERE $userid='$id'");
    5. $row = $this->fetch();
    6. return $row['online'];
    7. }
    8. function user_set_online($id)
    9. {
    10. $now = time();
    11. $this->query("UPDATE users SET online='$now' WHERE id='$id'");
    12. }
    Alles anzeigen


    und hier mal der code der mit den if schleifen

    Quellcode

    1. $user_o_t = $this->user_get_online($userid);
    2. $now = time();
    3. $time_rem = $now - $user_o_t;
    4. $formated = date("i", $time_rem);
    5. if($time_rem >= 900)
    6. {
    7. //wengier als 15 minuten oder genau 15 minuten
    8. $online = "(*)";
    9. }
    10. if($time_rem >= 3600)
    11. {
    12. //wengier als eine stunde oder genau eine stunde
    13. $online = "<font color=yellow>(".$formated." min)</form>";
    14. }
    15. $planetlist[$i]['user_online'] = $online;
    Alles anzeigen



    gruss dragon
    Riek-Media.com - Webhosting riek-media.com
  • ich bin auch noch am denken wie man es am besten lösen könnte aber bisjez keine wirklich gute idee dafür gefunden

    [offtopic]ES GIBT KEINE IF-SCHLEIFEN, AUF WELCHER SEITE/TUTORIAL STEHT BITTESCHÖN IF-SCHLEIFEN, MEIN GOTT[/offtopic]

    "Dragon4048" schrieb:

    ...

    und hier mal der code der mit den if schleifen
    ...
  • "EugenE" schrieb:

    ich bin auch noch am denken wie man es am besten lösen könnte aber bisjez keine wirklich gute idee dafür gefunden

    [offtopic]ES GIBT KEINE IF-SCHLEIFEN, AUF WELCHER SEITE/TUTORIAL STEHT BITTESCHÖN IF-SCHLEIFEN, MEIN GOTT[/offtopic]

    "Dragon4048" schrieb:

    ...

    und hier mal der code der mit den if schleifen
    ...


    Wieso denn das? Kommen gleich nach den while-Abfragen

    Wieso erweiterst du nicht einfach die usertabelle mit ne Spalte last_action in die du bei jeder Aktion den aktuellen timestamp reinschreibst.

    Dann kannste bei der Online-Abfrage gucken, ob das 10 Minuten her ist oder nicht und dementsprechend den Online Status anzeigen.
  • Da gebe ich BennyBunny Recht.

    Aber wenn du detailliertere Informationen (letzte Seite / Aktion etc.) speichern willst, dann würde ich alles rund um "useronline" in eine extra Tabelle schreiben.
    Da wird einfach die UserID, SessionID, Aktion und die aktuelle Zeit reingeschrieben. Dazu löschst du alle Einträge, die älter als x Minuten sind, bevor du eine Ausgabe daraus generierst.
    Somit hast du eine detailreiche Useronline-Anzeige.

    Zudem kannst du in dieser Tabelle aktuelle Sessiondaten verwalten, wenn du das brauchst.

    Falls es aber nur um die Zeit der letzten Aktion geht, würde ich das (vielleicht sogar zusätzlich) mit in die Usertabelle schreiben.


    Aber wie ich dich kenne, hast du vor allem bei der Umsetztung Probleme.
    Wenn du nicht weisst, wie du eine Datenbankabfrage machst, dann schau dir einmal bitte http://schattenbaum.net/php/ an.
    Falls du gerade für dein Browsergame an einem fertigen Script rumbastelt, dann lass das Coden jemand Anderes machen, der wirklich Ahnung davon hat. So lernst du es nie / nicht wirklich.


    Gruß, gn8 und demnächst gibts um diese Uhrzeit von mir keine Hilfe mehr... :P
    Die Japaner glauben jetzt auch, sie könnten den Superrechner verkaufen. Das wäre
    so, als würde man einen Jumbo-Jet nehmen, vorne und hinten die Spitzen absägen,
    davon 10 Stück zusammenschweißen und als ultimativen Super-Jet verkaufen.
  • Das hat doch nichts mit unmöglich zu tun. Ich hab euch gefragt was ich flasch mache. Du hast mir ein vorschlag gemacht den ich dann auch ausprbiert habe und der auch nicht funktioniert. Hab euch dann geschrieben das es leider so auch nicht funktioniert hat und dann werd ich hier für dum erkärt. Was soll man davon halten? bin 3 mal 7 jahre älter als du und dann soll ich mir von nem 21 jährigen solche komentare anhören nein danke
    Riek-Media.com - Webhosting riek-media.com