Problem mit User Online anzeige

T3qu

Grünschnabel
Hallo und zwar mein Problem liegt dabei, das die User nicht angezeigt werden die Online sind, mein Code sieht so aus:

PHP:
<?php
$jetzt = time();
$qry = mysql_query("SELECT * FROM users WHERE last_activity < $jetzt + 300");
$get = mysql_fetch_array($qry);
$user_online = $get['username'];
?>

<?php
echo $user_online;
?>

Ich hoffe ihr könnt mir helfen! :)
 
So wie du das machst, wird wenn überhaupt auch nur ein User angezeigt.
Dazu müsstest du alle User in einer Schleife auslesen, beispielsweise so:
PHP:
<?php
$jetzt = time() + 300;
$qry = mysql_query("SELECT * FROM users WHERE last_activity < $jetzt");
$user_online = array();
while( $get = mysql_fetch_array($qry) )
{
$user_online[] = $get['username'];
}
?>

<?php
foreach( $user_online AS $name )
{
echo $name. '<br />';
}
?>
Dann ist auch noch die Frage, ob dein Query überhaupt zum Erfolg führt.
Teste dazu folgendes:
PHP:
if( !$qry = mysql_query("SELECT * FROM users WHERE last_activity < $jetzt") )
{
    echo mysql_errno(). ' => '.mysql_error();
}
Oder teste den Query selbst mal in phpMyAdmin (oder etwas ähnlichem).
 
Also nen mysql_error spuckt es mir nicht aus, das Query kann ich nur indirekt testen per phpmyadmin und ich hatte vorhin schonmal die möglichkeit das ein User angezeigt wurde (aber nur einer) und ja, es t so nicht.

Also deine Methode die du mir geschrieben hast, spuckt auch nichts aus
 
Ehm...
das liegt an der Formatierung...

In Datenbank eingetragene zeiten (definiert mit now();) werden in "YYYY-mm-dd HH:ii:ss" formatiert,
time(); jedoch gibt eine Zahl aus.

Also probier folgendes:

PHP:
$time = time();
$timeformat = date("Y-m-s H:i:s",$time");

und dann $timeformat mit der Zeit aus der Datenbank vergleichen

also "SELECT * FROM users WHERE last_activity < $timeformat");"

Falls das nicht funktioniert, musst du erst die Zeit aus der Datenbank auslesen, mit einem Script die - und : entfernen, das selbe machst du mit time(); und vergleichst es dann
Code:

PHP:
session_start();
$connectionid = mysql_pconnect ($dbserver, $dbuser, $dbpasswd);
mysql_select_db($dbname);

$sql = "SELECT * FROM accounts";
$eingabe = mysql_query($sql);

while ($ausgabe = mysql_fetch_array($eingabe)){
   $timestamp = time();
   $nowtime = date("Y-m-d H:i:s", $timestamp);
   $maxtimedifference = 30; // maximaler Zeitunterschied = 30 sec
   $realdifference = date("Y-m-d H:i:s", $maxtimedifference
   $arrangement1 = mysql_timestamp($nowtime);
   $arrangement2 = mysql_timestamp($ausgabe[last_activity]);
   $arrangement3 = mysql_timestamp($realdifference);
   $diff = $arrangement1 - $arrangement2;
   if ($diff < $arrangement3){
      $onlinecount++;
   }
}

echo $onlinecount;

function mysql_timestamp($datum){
  list($jahr,$monat,$tag)=explode("-", $datum);
  list($stunde,$minute,$sekunde)=explode(":", $datum);
  return sprintf("%04d%02d%02d%02d%02d%02d", $jahr, $monat, $tag, $stunde, $minute, $sekunde);
}
 
Also ich hab das mit dem timeformat nun ausprobiert der Code sieht nun wie folgt aus:

PHP:
<?php
$time = time() + 300;
$timeformat = date("Y-m-s H:i:s",$time);
$qry = mysql_query("SELECT * FROM users WHERE last_activity < $timeformat");
$user_online = array();
while( $get = mysql_fetch_array($qry) )
{
$user_online[] = $get['username'];
}
?>

<?php
foreach( $user_online AS $name )
{
echo $name. '<br />';
}
?>

Jetzt allerdings spuckt er mir die Fehlermeldung aus:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\new\inc\online.php on line 6
 
PHP:
<?php
$jetzt = time();
$time = $jetzt + 300;
$qry = mysql_query("SELECT * FROM users WHERE last_activity <= '".$time."'");
?>

<?php
while($get = mysql_fetch_assoc($qry))
{
echo "".$get['username']."<br />";
}
?>
 
Zuletzt bearbeitet:
PHP:
<?php
$jetzt = time();
$time = $jetzt + 300;
$qry = mysql_query("SELECT * FROM users WHERE last_activity <= '".$time."'");
?>

<?php
while($get = mysql_fetch_assoc($qry))
{
echo "".$get['username']."<br />";
}
?>

Das hier spuckt mir allerdings auch nur fünf "<br />" aus, aber das wars dann auch wieder, ich weiß absolut nicht woran es liegt, die Session ist, also (eingeloggter Member) last_activity ist als Feld in der Datenbank, aber es haut nicht hin
 
So, ich habe meinen Code überarbeitet.
Wie bereits erwähnt, wird die Zeit in einer Datenbank als YYYY-mm-dd HH:ii:ss formatiert.

time(); würde jedoch eine Zahl in dem Format ausgeben
1216395874

Wie soll mann denn bitte
"2008-18-07 17:45:50" mit "1216395874" vergleichen?
Ist doch klar, das die Datenbank einen fehler ausgibt.

Wir müssen also den Datenbankeintrag auslesen und time(); formatieren!
Danach die - und : entfernen, damit wir nurnoch eine reine Zahl haben, diese können wir dann vergleichen!

Die Funktion dazu:
PHP:
function mysql_timestamp($datum){
  list($arr1, $arr2) = explode(" ",$datum);
  list($year,$month,$day) = explode("-",$arr1);
  list($hour,$minute,$second) = explode (":",$arr2);
  return sprintf("%04d%02d%02d%02d%02d%02d",$year,$month,$day,$hour,$minute,$second);
}

Kurze erläuterung:
Das eingegebene Datum wird erst in arr1 und arr2 zerlegt.
Da bei dem Datumsformat zwischen Datum und Uhrzeit ein Leerzeichen ist, ist dies nötig! D.h. das leerzeichen wird entfernt (explode) und das was links vom leerzeichen steht (das Datum) wird in arr1 gespeichert, das was rechts vom leerzeichen steht (die Uhrzeit) in arr2.

Als nächstes wird arr1 aufgespalten in year, month, day
denn arr1 hat noch immer diese form YYYY-mm-dd
Die - werden nun entfernt (explode)

Nun kümmert der code sich um arr2, welches das vormat HH:ii:ss noch aufweist.
Hier werden : entfernt.

Zuletzt werden die 6 einzelteile zusammen ausgegeben
Dabei ist dringend die zahl zwischen % und D zu beachten
%04d > für das Jahr, da es aus 4 Ziffern besteht
%02d > für die restlichen daten, da sie IMMER aus 2 Ziffern bestehtn

(der 1.3. wird als 01.03 gespeichert, würde man hier also %d nur hinschreiben, würde der code 13 ausgeben und nicht 0103, das aber in dem format für die rechnung benötigt wird)

So und der rest bleibt!
Verleichen ob das jetzige Datum einen gewissen unterschied zum datum in der datenbank aufweist, wenn ja, das ausführen, was auch immer du damit vor hast :D

Hoffe ich konnte dir weiterhelfen!
Die funktion funktioniert (lol xD) zu 100%

EDIT:
Achja, time formatiert man logischerweise dann wie folgt:
PHP:
$time = time();
$timeformat = date("Y-m-d H:i:s",$time)
 
Zuletzt bearbeitet:
Zurück