Wer ist gerade online Probleme

xGutaxJungex

Mitglied
Hallo, hier ist mal mein Code:

PHP:
include("files/config.php");

if (!empty($_SESSION['user_id']))   {

mysql_query("UPDATE ".$prefix."user_data SET time=NOW() WHERE Id='".$_SESSION['user_id']."'");

}

$result = mysql_query("SELECT name FROM ".$prefix."user_data WHERE TIMESTAMPDIFF(MINUTE,`last_login`,NOW()) AS `min` <= '10'");

while ($userdata = mysql_fetch_array($result)) {
echo "".$userdata['name'].": Letzte Aktivität vor ".$userdata['last_login']." Minute(n).";
}

und ich wollte euch fragen, was ich da jetzt falsch gemacht habe.
Hier die Fehlermeldung:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/virtual/game-force.net/htdocs/index.php(55) : eval()'d code(1) : eval()'d code on line 11

Danke schon mal für die Hilfe :D
 
Hi,

na, wenn mir das mal nicht bekannt vorkommt. ^^
Es ist sehr lobenswert, dass Du die Suchfunktion benutzt. Lies das gefundene Thema mal bis zum Ende, dann weißt Du, warum die Abfrage fehlschlägt. ;)

Übrigens wird es in Deinem Array $userdata keine Spalte "last_login" geben, wenn Du diese nicht im SELECT auch auswählst.

LG
 
Ok, das Problem ist gelöst, aber wenn ich den Code jetzt so mache:
PHP:
include("files/config.php");

if (!empty($_SESSION['user_id']))   {

mysql_query("UPDATE ".$prefix."user_data SET time=NOW() WHERE Id='".$_SESSION['user_id']."'");

}

$result = mysql_query("SELECT name, last_login FROM ".$prefix."user_data WHERE TIMESTAMPDIFF(MINUTE,'last_login',NOW()) <= '10'");

while ($userdata = mysql_fetch_array($result)) or die(mysql_error()) {
echo "".$userdata['name'].": Letzte Aktivität vor ".$userdata['last_login']." Minute(n).";
}

Dann kommt folgende Fehlermeldung:
Parse error: syntax error, unexpected T_LOGICAL_OR in /var/www/virtual/game-force.net/htdocs/index.php(55) : eval()'d code(1) : eval()'d code on line 11

Obwohl ich die Tabelle habe und die Spalten.
 
ändere das hier:
PHP:
while ($userdata = mysql_fetch_array($result)) or die(mysql_error())
zu
PHP:
while ($userdata = mysql_fetch_array($result))
 
Erstmal ein paar grundsätzliche Anmerkungen.

1) Feldnamen setzt man in Apostrophe, weil sonst alles was in MySQL eine Funktion hat (wie z.B. "time") nicht mehr als Feldname interpretiert wird.
2) Zahlen setzt man NICHT in Hochkommas, weil sie sonst nicht als Wert sondern als string interpretiert werden.

Z.B.

Code:
mysql_query("UPDATE `".$prefix."user_data` SET `time`= NOW() WHERE `Id`= ".$_SESSION['user_id']);

Zum eigentlichen Problem:
Wenn du das Feld `time` aktualisierst, wirst du hinterher nicht allzuviele Datensätze finden, in denen das Feld `last_login` aktualisiert ist.
Logischerweise wird das echo nichts ausgeben, schlicht weil die Abfrage nichts findet, was die Bedingung vom WHERE erfüllt.
 
Sorry, dass ich ein Doppelpost mache, aber ich habe noch ein Problem. Ich habe mir mal mein eigenes Ding gecodet. Ok es geht auch, ich checke die IPs und er nimmt die raus und feritg, aber er soll nur die von den eingeloggten raus nehmen.

PHP:
$res = $db->get($prefix."user_online");
$user_online = array();
foreach($res as $key => $row) {
    $res_u = $db->get($prefix."user_data", "`last_ip` = '".$row['ip']."'", 1);
    if(count($res_u)) 
        $user_online[] = $res_u['name'];
        echo $res_u['name'];
        echo " , ";
}

In diesem Code, nimmt er auch nur normale User, die garnicht eingeloggt sind.
So sieht das aus:

Mitglieder online: xGutaxJungex , , ,

Nach einem Komma, sollte eigentlich ein neuer Nickname kommen, aber er zählt das mit :S .
 
Zurück