Problem mit "User online"-Script

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit "User online"-Script

    Tach Leute!

    Ich bin grad dabei ne Art "community" zu coden, bislang klappt auch alles einigermaßen
    Allerdings hab ich ein kleines Problem...
    Es sollen alle User die online sind mit Namen ausgegeben werden. Also hab ich mir gedacht ich mach in der DB ein Feld "online". Beim einloggen wird das jetzt auf "true" und beim ausloggen auf "false" gesetzt.
    So weit so gut ... Wenn sich der "richtig" ausloggt klappt das auch ohne Probleme, wenn der User allerdings z.B. einfach Browser schließt bleibt er in der Datenbank als "online" stehen.
    Kann man irgendwie mit dem automatisch "kill" der sessions noch ne Funktion verknüpfen?
    Oder wie geh ich mein Problem am besten an?

    gruss
    Matthias

  • #2
    einfach ein delete vor dem select machen!

    Beim userlogin schreibst du ein timestamp mit in die Datenbank.
    Bei jedem Login bzw. select auf die OnlineTabelle löscht du alle Einträge die älter als x Minuten sind (delete * from bla where timestamp < x). Wichtig ist ein Update auf die Spalte mit dem timestamp-Wert. Diese muss bei jeder Aktion vom USer upgedatet werden.

    hope that helps
    berni




    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

    Kommentar


    • #3
      Joooooooo danke dir

      Wenn mans mal weiss is es ganz einfach

      gruss
      Matthias

      Kommentar


      • #4
        hmm,

        so mach ich es bei unserem Board :
        Code:
        function cookieupdate($anrufer,$ip)
               {
                 global $dbserver,$dbuser,$dbpass,$dbname;
                 if ($anrufer<>"")
                    {
        
                      $db = @mysql_connect( $dbserver,$dbuser,$dbpass);
                      mysql_select_db($dbname,$db);
                      $query = "DELETE FROM online WHERE name = '".$anrufer."'";
                      mysql_query($query,$db);
                      $query = "DELETE FROM online WHERE name = '' AND ip = '".$ip."'";
                      mysql_query($query,$db);
                      $timer = time();
                      $query= "INSERT INTO online VALUES (\"".$anrufer."\",\"".$timer."\",\"".$ip."\")";
                      mysql_query($query,$db);
                    }
                 else
                    {
                      $db = @mysql_connect( $dbserver,$dbuser,$dbpass);
                      mysql_select_db($dbname,$db);
                      $query = "DELETE FROM online WHERE name = '' AND ip = '".$ip."'";
                      mysql_query($query,$db);
                      $timer = time();
                      $query= "INSERT INTO online VALUES (\"\",\"".$timer."\",\"".$ip."\")";
                      mysql_query($query,$db);
                    }
               }
        
        function onlineuser($text1,$text2)
               {
                 global $dbserver,$dbuser,$dbpass,$dbname,$STL;
                 $db = @mysql_connect( $dbserver,$dbuser,$dbpass);
                 mysql_select_db($dbname,$db);
                 $timer = time()-900;
                 $query = "DELETE FROM online WHERE login < ".$timer;
                 mysql_query($query,$db);
                 $query = "SELECT name FROM online WHERE name <> \"\"";
                 $result = mysql_query($query,$db);
                 $useronline = mysql_num_rows($result);
                 $query = "SELECT ip FROM online";
                 $result2 = mysql_query($query,$db);
                 $allusers = mysql_num_rows($result2);
        		 $usergesamt = $allusers - $useronline;
                 $query = "SELECT * FROM maxuser";
        		 $result3 = mysql_query($query,$db);
        		 $maxuser = mysql_fetch_array($result3,MYSQL_ASSOC);
        		 if ($allusers > $maxuser["user"])
        		 	{
        				$query = "DELETE FROM maxuser WHERE user = ".$maxuser["user"];
        				mysql_query($query,$db);
        				$zeit = time();
        				// $zeit = strftime("%Y-%m-%d %H:%M:%S",time());
        				$query = "INSERT INTO maxuser VALUES (\"".$allusers."\", \"".$zeit."\")";
        				
        				mysql_query($query,$db);
        				$max1 = $allusers;
        				$max2 = $zeit;
        			}
        		 else
        		 	{
        				$max1 = $maxuser["user"];
        				$max2 = $maxuser["zeit"];
        			}
        		 if ($useronline == 0 AND $usergesamt == 0)
                    {
                                        global $STL, $SBR;
        
                       $t = new tabelle;
                          $t->rows = 2;
                          $t->cols = 1;
                          $t->einrueck = $STL;
                          $t->rowspan = 3;
                          $t->border = 0;
                          $t->tt = array( $text1 );
                          $t->sb = array("200");
                          $t->klaraPfad = "bilder/klara.gif";
                          $t->ra = $SBR[0];// reihen abstand
                       $t-> doTable("open");
                       echo "<tr><td>".$text2."</td></tr></table>";
                    }
                 else
                    {
                      $zeilen = ceil($useronline/9);
                      $t = new tabelle;
                          $t->rows = 2+$zeilen;
                          $t->cols = 10;
                          $t->einrueck = 24;
                          $t->rowspan = $zeilen+5;
                          $t->border = 0;
                          $t->colspan= array("9");
                          $t->tt = array( $text1 );
                          $t->sb = array("80","80","80","80","80","80","80","80","80");
                          // $t->sb = array("50","50","50","50","50","50","50","50","50","50","50","50","50","50","50");
                          $t->klaraPfad = "bilder/klara.gif";
                          $t->ra = $SBR[0];// reihen abstand
                       $t-> doTable("open");
                       $spaltenzaehler = 0;
                       if ($useronline<>0)
                        {
                         echo "<tr>";
                         while ($row = mysql_fetch_array($result,MYSQL_ASSOC))
                           {
                              $spaltenzaehler++;
                              if ($spaltenzaehler == 10)
                                {
                                  $spaltenzaehler = 1;
                                  echo "</tr><tr>";
                                }
                              echo "<td><a href=\"showuser.php?puser=".$row["name"]."&ppass=\">".$row["name"]."</a></td>";
                           }
                         echo "</tr>";
                        }
                       if ($usergesamt > 0)
                        {
                           echo "<tr><td colspan=\"10\"><b class='small'>nicht eingeloggte User ".$usergesamt."</b></td></tr>";
                        }
                       echo "<tr><td colspan=\"10\"><b class='small'>Maximale Onlineuserzahl ".$max1." am ".date("d-m-Y H:i",$max2)."</b></td>";
        			   echo "</tr></table>";
                    }
                  mysql_close($db);
               }
        cookieupdate wird aufgerufen sobald die übersicht angezeigt wird, es werden alle alten Einträge aus der userliste gestrichen die nimmer da sind bzw. eben seit längerer Zeit nichtmehr diese Funktion aufgerufen haben.
        naja und onlineuser gibt die User in einer Tabelle aus.

        Kommentar


        • #5
          Warum einfach wenns auch kompliziert geht?

          Danke JoelH, aber ich habs nun schon so gemacht wie es Berni vorgeschlagen hat ... funzt wunderbar *freu*

          gruss
          Matthias

          Kommentar

          Lädt...
          X