Hey guys,
I'm working on a forum, and I've got the following code to update the last visit after xx seconds (in my case 600, so 10 minutes viewing time before all folders become "read" (with another color folder in front of it))
This is the code (I've added some echo's to clarify things for myself.. what it's doing and all):
<?
// UPDATE STUFF AND DELETE IT
$timeset=600;
$time=time();
$timeout=$time-$timeset;
$sql=mysql_query("SELECT * FROM GT_whosonline WHERE lastvisit<'$timeout'");
if (mysql_num_rows($sql)!="0")
{
while ($row=mysql_fetch_array($sql)) // ERROR HERE...
{
if ($row[name]!="guest")
{
$exp=explode("||",$row[name]);
$member_id="$exp[1]";
$username="$exp[0]";
echo"BUSY UPDATING RECORD OF $username AND SETTING LASTVISIT TO $row[lastvisit]<br>";
$sql=mysql_query("UPDATE GT_members SET lastvisit='$row[lastvisit]' WHERE id='$member_id'");
echo"DELETING RECORD FOR MEMBER $username<br>";
$sql=mysql_query("DELETE FROM GT_whosonline WHERE name ='$username||$member_id'");
}
else
{
echo"DELETING RECORDS FOR NON-MEMBERS<br>";
$sql=mysql_query("DELETE FROM GT_whosonline WHERE ip='$row[ip]'");
}
}
}
// INSERTING DATA INTO whosonline
if ($HTTP_COOKIE_VARS["memberid"])
{
$member_id=$HTTP_COOKIE_VARS["memberid"];
$sql=mysql_query("SELECT username FROM GT_members WHERE id='$member_id'");
$row=mysql_fetch_array($sql);
$username="$row[username]";
$sql=mysql_query("SELECT FROM GT_whosonline WHERE name ='$username||$member_id'");
if (mysql_num_rows($sql)=="0")
{
echo"INSERTING DATA FOR MEMBER INTO GT_whosonline<br>";
$ip=$REMOTE_ADDR;
$now=time();
$sql=mysql_query("INSERT INTO GT_whosonline (name,ip,lastvisit) VALUES ('$username||$member_id','$ip','$now')");
}
}
else
{
$ip=$REMOTE_ADDR;
$sql=mysql_query("SELECT FROM GT_whosonline WHERE ip='$ip' AND name='guest'");
if (mysql_num_rows($sql)=="0")
{
echo"INSERTING DATA FOR GUEST INTO GT_whosonline<br>";
$now=time();
$sql=mysql_query("INSERT INTO GT_whosonline (name,ip,lastvisit) VALUES ('guest','$ip','$now')");
}
}
if ($HTTP_COOKIE_VARS["memberid"])
{
echo"SELECTING LAST VISIT OF MEMBER IN GT_members<br>";
$member_id=$HTTP_COOKIE_VARS["memberid"];
$sql=mysql_query("SELECT lastvisit FROM GT_members WHERE id='$member_id'");
$row=mysql_fetch_array($sql);
$lastvisit=$row[lastvisit];
}
else
{
if (!$HTTP_COOKIE_VARS["lastvisit"])
{
echo"INSERT COOKIE<br>";
$now=time();
setcookie("lastvisit","$now",time()+31536000);
$lastvisit=$now;
}
echo"SELECT LASTVISIT WITH COOKIE<br>";
$lastvisit=$HTTP_COOKIE_VARS["lastvisit"];
}
?>
It works, but it gives a freaky error that, in my opinion, shouldn't be given...
It's the first while(row) loop... check the comment to see where (// ERROR HERE)
The stuff that's being echo'ed when it gives errors (two different things):
// LOGGING IN
DELETING RECORDS FOR NON-MEMBERS
Warning: Supplied argument is not a valid MySQL result resource in /home/sites/site95/web/forumheader.php on line 12
INSERTING DATA FOR MEMBER INTO GT_whosonline
SELECTING LAST VISIT OF MEMBER IN GT_members
// LOGGED IN AND AFTER REFRESH
BUSY UPDATING RECORD OF VoiD AND SETTING LASTVISIT TO 1018038117
DELETING RECORD FOR MEMBER VoiD
Warning: Supplied argument is not a valid MySQL result resource in /home/sites/site95/web/forumheader.php on line 12
INSERTING DATA FOR MEMBER INTO GT_whosonline
SELECTING LAST VISIT OF MEMBER IN GT_members
The problem is, I <b>DO NOT!</b> know why it gives this error... I've checked every query with a or die command after them, but it comes out clean.
I also check if there are any results before using the while loop... but it still gives the error, even if there are >0 results...
Freaky
Hope you can help me out,
Greetz,
Menno