我仔细看了一下你的程序,明白你的意思应该是:
首先删除旧的用户在线信息,然后根据当前用户是否在表中记录,如果有则更新相关信息,否则,添加一条新记录;最后从该表中取出数据记录条数,表示在线人数。出现这种情况的原因可能是:
1.请你仔细检查一下下面的代码:
if($flag)
{
$query_up="update  pcmemberonline set onwhere='$onwhere' where whom='$username' and ip='$ip'";
$res_up=mysql_query($query_up,$db) or die ("can't add new online user");
}
else
{
$query_add="insert into pcmemberonline(whom,ip,onwhere,ontime) values('$username','$ip','$onwhere','$nowtime')";
$res_add=mysql_query($query_add,$db) or die ("can't add new online user");
//echo "res:".$res_add;
}
此语句中的变量'$onwhere' 在条件语句的第一个分支中没有来源,这样引用很有可能会造成程序无法正确执行。检查一下该段代码是否有错误,如果有的话,数据库中肯定无法插入新的用户数据;
2.循环语句是否有问题:
$i=0;
while($myrow=mysql_fetch_row($res))
{
    $online[$i][0]=$myrow[0];
    $online[$i][1]=$myrow[1];
    $online[$i][2]=$myrow[2];
    $online[$i][3]=$myrow[3];
    $online[$i][4]=$myrow[4];
    $i++;
}
也请你仔细检查一下。