problem bei onlinestatusanzeige

  • Wünsche allen einen guten abend;-)


    ich komme gleich zur frage;-)

    ich habe mir eine shoutbox modifiziert und daraus sozusagen eine art "shoutchat" gebastelt... das ganze funzt auch einwandfrei nur bei der onlineanzeige gehts nicht ganz auf

    ich habe eine tabelle namens user darin werden alle die die shoutbox joinen erfasst und die aktuelle zeit, also immer wenn sie was schreiben oder was anklicken wird die zeit in der datenbank erfasst und ausgewertet

    Code
    $onlinePeriod = 1; // 5 Minuten Toleranz
    $status= "SELECT userID, username, activity, status FROM users WHERE userID= ".$_SESSION['id']."";
    $status2= mysql_query($status);
    $user= mysql_fetch_assoc($status2);
    $timestamp =$user['activity'];
     
    $user['is_online'] = ((time() - $onlinePeriod * 10) <= $timestamp) ? true : false;  
    if($user['is_online']==true){
    echo $user['username'];
    }



    eingetragen wird das ganze so:
    mysql_query("UPDATE users SET activity = ".time()." WHERE userID = '".$_SESSION['id']."'");

    ja die aktivzeit ist nur 10 sekunden;-) ist zu testzwecken so^^

    also mein problem ios, das ich zwar MICH selber sehe wenn ich online bin und nichts schreibe(sehe ich imer wenn ich die seite aktualisiere)

    aber ich weiss nicht wie ich es für andere sichtbar machen soll.. jeder sieht nur sich selbst. weiss einer einen rat?

    GreeZ $me

  • WHERE userID= ".$_SESSION['id']

    Was erwartest du da?

  • session id ist die id mit der er sich einloggt.. dies funzt ja auch es geht nur darum dass es nicht alle user ausgibt die in den letzen x minuten da waren sondern nur mich selber

  • Natürlich zeigt er nur deinen Online-Status an, denn du schänkst das doch auch entsprechend ein. Du willst aber alle Online-User, also darfst du das auch nicht mit der Session-Id begrenzen.

  • Bei einer User-Online-Anzeige interessieren dich doch alle User, die online sind. Beim Update der Tabelle (activity) musst du natürlich die Id nehmen, aber nicht bei der Auflistung.

  • $status= "SELECT userID, username FROM users WHERE activity >= DATE_DIFF(time(), INTERVAL 5 MINUTE)";
    $status2= mysql_query($status);
    $user= mysql_fetch_assoc($status2);


    wenn ichs so auswerte? sollte doch besser sein oder? da krieg ich aber nen error... welchen ich bisher immer noch nicht kapiere

    Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in blalbalba

  • Beachtest du auch alle Antworten, die du bekommst? Ich habe dir vorgemacht, wie man das richtig macht!

    $xxxx = mysql_query($yyyyy) or die ("MySQL-Fehler: " . mysql_error());

    Ich würde mal auf time() achten. ;)

    Einmal editiert, zuletzt von bandit600 (10. November 2008 um 20:26)

  • MySQL-Fehler: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '), INTERVAL 5 MINUTE)' at line 1

    was passt ihm dabei nicht?...

    sry... bin echt übelst verpeilt... boah.. das kann doch nicht so schwer sein-.-

  • Ich würde mal auf time() achten. Du erhoffst dir da einen Funktionsaufruf, der aber nicht stattfindet.

    echo time();

    echo "time()";

    Richtig debuggen
    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(E_ALL); und ini_set("display_errors", true);
    3. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
    5. Schritt 3 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

  • ich bekomm das update in der datenbank ja hin.. ich krieg bei jedem user das online system hin.. aber ich verwende einfach nru einen falschen begriff und komm nicht drauf, wie ich alles ausgeben soll....

    das sonstige script funktioniert einwand frei... und wo soll ich hier gross ausgaben machen, wenn es schon beim selecten scheitert?