User online (noch nirgends wirklich beantwortet)

sonicks

Erfahrenes Mitglied
So... also jetzt ma was wo ich mich schon tot gesucht hab .
Ich hab ein session login system, wo die daten (username und id etc. ) in "$userid" in einer Datenbank gespeichert werden.

Jetzt möchte ich anzeigen lassen, wer gerade online ist . Wenn da jemand ne lösung hat , bitte posten :)
 
Also folgendes, du schreibst in die Datenbank auch immer den aktuellen Timesatmp in einer Spalte `time` dann liest du per simplen mysql_query(); alles aus wo die der eingetragene timestamp innerhalb eines bestimmten Zeitraums sind also also

PHP:
$onlineborder = $time -(5*60);
$onlineborder2 = $time +(5*60);
$online= mysql_query("SELECT COUNT(*) FROM Tabelle WHERE time >= '$onlineborder' and time <= '$onlineborder2'");
$online = mysql_fetch_row($onlinemember);

echo $online[0];

Das ganze kannst natürlich auch mit nicks machen , aber das bleibt dann dir überlassen ;)
 
Die Idee ist, das man die Anzahl der Session-Datensätze der User ermittelt, die grade Online sind :) Hast du das Script auch angepasst? ALso Tabelle & time im SQL-Statement durch die passenden Vars ersetzt ? Ausserdem muss es
PHP:
$online = mysql_fetch_row($online);
heissen :)
Da hat sich origin^sad wohl vertippt :)
 
blubb ... *baaaaaaaahnhof*

nuja ... also ich konnt mit dem ganzen ^^ nix anfangen bis jetzt... sorry, aber naja trotzdem danke :)
 
Naja Der Sinn ist eigentlich der Man liest aus einer mySQL Tabelle alles aus was in ienem bestimmten Zeitraum ist

bzw
PHP:
$border = time() - (5 * 60); // 5 Minuten
// oder
$border = time() - (10 * 60); // 10 Minuten
 
hmm,

Code:
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);
       }
diese Funktion nutze ich auf meinem Board. Der hintereteil ist nur die Ausgabe. Die Tabellen sehen so aus =>
CREATE TABLE maxuser (
user int(11) NOT NULL default '0',
zeit varchar(20) default NULL
) TYPE=MyISAM;
das ist die Tabelle mit der maximal Zahl die je aufem Board war gleichzeitig
CREATE TABLE online (
name varchar(15) NOT NULL default '',
login int(11) NOT NULL default '0',
ip varchar(16) NOT NULL default ''
) TYPE=MyISAM;
hier steht der Username drin und wann er sich das letztemal gezeigt hat. ist diese Zeit abgelaufen dann wird er wieder aus der Liste gelöscht, ist der erste DELETE Befehl im script. Ist der User nicht eigeloggt wird er anhand der IP identifiziert und dadurch ergeben sich die nichteigeloggten Besucher.
 
ich hab mal ein bisschen mit dem Code von ganz oben rumprobiert und es funtzt ganz gut:

PHP:
<?

  $db = mysql_connect($dbserver,$dbuser,$dbpass);
  mysql_select_db($dbname,$db);
  $time = time();
  $onlineborder = $time - (5 * 60);
  $onlineborder2 = $time + (10 * 60);
  $online= mysql_query("SELECT COUNT(*) FROM member WHERE time >= '$onlineborder' and time <= '$onlineborder2'");
  $online = mysql_fetch_row($online);
  $query = "SELECT username FROM member WHERE time >= '$onlineborder' and time <= '$onlineborder2'";
  $result = mysql_query($query,$db);
  while ($row = mysql_fetch_array($result,MYSQL_ASSOC))

  //echo $online[0];

  echo "<font size=1>".$row["username"]."</font> <br>";

?>
Die Leute die in dem Bestimmten Zeitraum Online sind, werden angezeigt (den Counter hab ich erst mal mit absicht Kommentiert)

Dann hab ich noch mal versucht das script aus dem Forum umzuschreiben, aber das hat net ganz gefuntzt ... mich quält immer noch die Frage wie ich jetzt die Daten des Users anzeigen kann, wenn man auf den Namen klickt. Kann mir da jemand helfen?
PHP:
<?

  $db = mysql_connect($dbserver,$dbuser,$dbpass);
  mysql_select_db($dbname,$db);
  $time = time();
  $onlineborder = $time -(5 * 60);
  $onlineborder2 = $time +(10 * 60);
  $online= mysql_query("SELECT COUNT(*) FROM member WHERE time >= '$onlineborder' and time <= '$onlineborder2'");
  $online = mysql_fetch_row($online);
  $query = "SELECT * FROM member WHERE time >= '$onlineborder' and time <= '$onlineborder2'";
  $result = mysql_query($query,$db);
  while ($row = mysql_fetch_array($result,MYSQL_ASSOC))

  //echo $online[0];

  echo "<a href=\"online.php?user=".$row["username"]."\">".$row["username"]."</a><br>";

  if ($user == "Tobias") {

  $db = mysql_connect($dbserver,$dbuser,$dbpass);
  mysql_select_db($dbname,$db);
  $result = mysql_query($query,$db);
  $row = mysql_fetch_array($result,MYSQL_ASSOC);
                         
  echo "Name: ".$row["username"]."<br>";
  echo "Mail: ".$row["mail"]."";

  }

?>
Das ganze geht nur wenn ich genau den Usernamen angebe. Wie kann ich das machen das ich das nicht muss? sondern das z.B. mit der ID geht?
 
Zurück