Maison >php教程 >php手册 >php高手进阶:写一个用户在线显示的程序

php高手进阶:写一个用户在线显示的程序

WBOY
WBOYoriginal
2016-06-13 10:30:43994parcourir


  在开始这篇文章时,作者假设读者已能够写出一个用户的登入认证程序.
  ----------------------------------------------------------
  记数器可完成访问 web 页的总次数,但却不能得知一个时段中访问量的动态记载,下面就来介绍如何写一个各个时段动态显示访问量的方法.
  
  要记载访问量,首先就要在 MySQL(和PHP搭配之最佳组合) 内建立一个数据库,姑且给这个数据库取名为 line,同时建立一个名为 line 的数据表,表内的字段分别为"用户名(name varchar(20)),时间(time datetime)".当然读者也可根据需要增加数据表的字段.
  
  建立好数据库后,就可以开始设计程序了,现在先理清一下思路,要想显示访问量,当然数据库就必须要有记录,我已假设读者有能力写一个用户登入程序了,所以向数据库添加纪录可在登入程序假设为 login.php(做为现在的主流开发语言) 里添加:
  
  先给现在时间付值:$time=date(Y-m-d H:i:s);
  MySQL(和PHP搭配之最佳组合)_select_db(line);
  MySQL(和PHP搭配之最佳组合)_query("insert into line (name,time) values($name,$time)");
  
  好了,现在每一位登入的用户在数据库里都有了一个记录,下面就来完成用户在线显示的程序 line.php(做为现在的主流开发语言):
  
  
  MySQL(和PHP搭配之最佳组合)_connect("local","","");
  MySQL(和PHP搭配之最佳组合)_select_db(line);
  $result=MySQL(和PHP搭配之最佳组合)_query("select * from line");
  $num=MySQL(和PHP搭配之最佳组合)_numrows($result);
  if (!empty($num)) {
  echo "

";
  for($i=0;$i  $name=MySQL(和PHP搭配之最佳组合)_result($result,$i,"name");
  echo "";
  }
  }
  ?>
  
  上面这段程序已能显示所有在线的用户人数及各用户名,当然这个程序还很不完善.如果其中一个用户登出离开后,数据库就不应该有此用户的记录所以,还得在登出程序假设为 logout.php(做为现在的主流开发语言) 内加上删除功能:
  
  MySQL(和PHP搭配之最佳组合)_select_db(line);
  MySQL(和PHP搭配之最佳组合)_query("delete from line where name=$name");
  
  这时一个基本的用户在线功能已经完成,接下来继续在 line.php(做为现在的主流开发语言) 内增加代码使功能更加完善,首先我们得规定用户在多长时间没继续浏览 line.php(做为现在的主流开发语言) 时就认为该用户已经离开,这里给定一个时间限制为 5 分钟,也就是说程序将显示从现在开始的前 5 分钟的用户情况,所以必须 line.php(做为现在的主流开发语言) 内设置一个现在时间告知程序从这个时间开始执行,然后实现程序执行时把数据库内记录的时间减去现在时间大于 5 分钟的所有记录删除,这样任何用户在执行 line.php(做为现在的主流开发语言) 时,都能看到 5 分钟内的所有在线的用户,完成这个功能需要以下这个数据库语句:
  
  delete from line where time  minute)
  
  但是其中还有一个问题就是如果有个用户一直在不停地执行 line.php(做为现在的主流开发语言) 超过 5 分钟以上时,程序必须得分辨出该用户并一直显示该用户,在这就得利用 cookie 来实现更新数据库的时间记录了,因为是登入认证的,所以会有个 cookie 来记住用户的资料的,假设这个记录用户姓名的 cookie 变量为 $cookiename (具体的变量视 cookie 的设置而定),剩下的就很好办了,利用这个 cookie 变量完成数据库的修改:
  
  update line set time=$time where name=$cookiename
  
  下面来完善 line.php(做为现在的主流开发语言):
  
  
  //设置现在的时间
  $time=date(Y-m-d H:i:s);
  MySQL(和PHP搭配之最佳组合)_connect("local","","");
  MySQL(和PHP搭配之最佳组合)_select_db(line);
  
  //更新用户的记录
  MySQL(和PHP搭配之最佳组合)_query("update line set time=$time where name=$cookiename");
  
  //删除超过 5 分钟的用户记录
  MySQL(和PHP搭配之最佳组合)_query("delete from line where time  
  $result=MySQL(和PHP搭配之最佳组合)_query("select * from line");
  $num=MySQL(和PHP搭配之最佳组合)_numrows($result);
  if (!empty($num)) {
  echo "
";
  echo "现在在线人数为:$num";
  echo "
用户:$name
";
  for($i=0;$i  $name=MySQL(和PHP搭配之最佳组合)_result($result,$i,"name");
  echo "";
  }
  }
  ?>
  
  好用户在线显示功能完成.
  
";
  echo "现在在线人数为:$num";
  echo "
用户:$name
Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn